当前位置:编程学习 > JS >>

JS Array

   JavaScript数组: 如果正常来使用,JS里的数组与C、Java里的数组是相似的,都是由中括号包裹起来的一组元素。但与这些语言不同的是,JS里数组元素不一定要是相同数据类型的。如var arr = [1,2.2,true,"hello"],这样的数组在JS里是合法的。用字面量初始的数组一般会有默认增长的索引(index)与长度(length)。即可以用数字下标来引用相应位置的元素,长度会默认增长。
       但是,在JS里面,所有不是number,string,boolean,null,undefined这五种类型的数据都是object。即数组(array)也是一种对象。可以这样来写:
[javascript] 
<span style="font-size:18px;">var arr = []; 
arr["one"] = 1; 
arr["two"] = 2; 
arr.three = 3;</span> 

       这个数组arr的arr.length=0,打印出来也是空数组,但可以像对象属性引用一样来引用定义的属性,如console.log(arr.one)会打印出数字1。
       因为数组本质上是对象,所以JS对象的某些特性也可以用于数组上,如可以用delete方法来删除数组元素:
[javascript]
<span style="font-size:18px;">var a = [1,2,3,4,5]; 
delete a[1]; 
console.log(a.length); 
console.log(a);</span> 

       上面两个打印语句分别会打印出5和[1,undefined,3,4,5]。delete语句会删掉元素,但不会删掉位置。这样做会使数组变成稀疏数组。
       关于稀疏数组与非稀疏数组:
         因为JS是一门松散的语言,所以很多在其它严格类型的语言里数组没有的特性在JS里面都是合法的。如:
[javascript] 
<span style="font-size:18px;">var a = [0,1,2,3]; 
a[6] = 6; 
console.log(a); //[0,1,2,3,undefined,undefined,6] 
</span> 

        从上面的打印语句可以看出,JS里面这样使用比数组长度长的索引是没问题的,但它就把一个非稀疏数组变成了一个稀疏数组。即中间有两个位置是没有值的,但这样做是完全合法的。数组的长度会自动的从4增长到7。
       对数组元素的引用与其它语言类似,通过[]引用位置下标的方式来引用,即[]里面是位置的非负整数(索引位置从0开始)。但中括号里面也可以不是整数,也可以是小数或字符串。如果小数点后面都是0的话,JS会将其转换为整数。如果不都是0,在赋值的时候JS会以对象属性的方式将其添加到数组上面。如果字符串里的数可以转换成一个整数,JS就将其转换成一个整数来使用,同样如果不能转换成一个整数的时候,JS以对象属性的方式将其添加到数组上面。
       数组的遍历之for循环与for/in循环的区别:
              一般来说,for循环与for/in循环区别不是很大。但是,有一个很大的区别就是,一般的for循环上限是数组的长度,因而它只是取得数组可以打印出来的那些值。但是for/in循环就不同,它会额外遍历数组的属性。即将不能用整数下标引用到的,以属性方式添加到数组上的元素也遍历出来。同时for/in循环没有位置顺序特性。如下所示:   www.zzzyk.com
[javascript]
<span style="font-size:18px;">var arr = [0,1,2,3]; 
arr[6] = 6; 
arr["5.0"] = 5; 
arr[4.00001] = 4; 
var logStr = ""; 
for(var i = 0, len = arr.length; i < len; i++){ 
       logStr += "--" + arr[i]; 

console.log(logStr); 
logStr = ""; 
for(var i in arr){ 
      logStr += "--" + arr[i]; 

console.log(logStr);</span> 
两个打印语句打印出来的分别为:
--0--1--2--3--undefined--undefined--6
--0--1--2--3--6--5--4

       数组的方法:
           join(): 以join方法里面的参数作为分隔符来将数组转换成字符串。
           reverse(): 将数组中元素按原位置转置,即开头元素变成最后一个元素,第二个元素变成倒数第二个元素,以此类推。
          sort(): 默认是以字母表的顺序对数组进行排序,返回排序后的数组。该方法的参数也可是一个函数,排序方法会按照函数的表示来进行。
          concat(): 参数为单个的元素时,把元素添加到数组的后面。如果参数是数组,则把数组中的元素添加到前面的数组里面。但是,数组里的数组会按照原样进行添加。
          slice(): 与字符串的slice方法相似,将数组进行分割。返回分割出来的数组。
          splice(): 该方法与slice方法不同,它会对原数组产生影响,可以用它来插入与删除数组元素。
          push()与pop(): 将数组当成栈,把数组末尾当成栈顶进行入栈与出栈操作。
          unshift()与shift(): 与上面方法类似,但它们是把数组开头当成栈顶进行操作。
          toString()与toLocaleString(): 将数组元素变成字符串然后进行拼接。
       另外ECMAScrip 5数组新增了一些方法,稍后再总结。今天就先写到这吧。

-------------------------------------------------------------------

补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,