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)也是一种对象。可以这样来写:

var arr = [];
arr["one"] = 1;
arr["two"] = 2;
arr.three = 3;

这个数组arr的arr.length=0,打印出来也是空数组,但可以像对象属性引用一样来引用定义的属性,如console.log(arr.one)会打印出数字1。

因为数组本质上是对象,所以JS对象的某些特性也可以用于数组上,如可以用delete方法来删除数组元素:

var a = [1,2,3,4,5];
delete a[1];
console.log(a.length);
console.log(a);

上面两个打印语句分别会打印出5和[1,undefined,3,4,5]。delete语句会删掉元素,但不会删掉位置。这样做会使数组变成稀疏数组。

关于稀疏数组与非稀疏数组:

因为JS是一门松散的语言,所以很多在其它严格类型的语言里数组没有的特性在JS里面都是合法的。如:

var a = [0,1,2,3];
a[6] = 6;
console.log(a); //[0,1,2,3,undefined,undefined,6]

从上面的打印语句可以看出,JS里面这样使用比数组长度长的索引是没问题的,但它就把一个非稀疏数组变成了一个稀疏数组。即中间有两个位置是没有值的,但这样做是完全合法的。数组的长度会自动的从4增长到7。

对数组元素的引用与其它语言类似,通过[]引用位置下标的方式来引用,即[]里面是位置的非负整数(索引位置从0开始)。但中括号里面也可以不是整数,也可以是小数或字符串。如果小数点后面都是0的话,JS会将其转换为整数。如果不都是0,在赋值的时候JS会以对象属性的方式将其添加到数组上面。如果字符串里的数可以转换成一个整数,JS就将其转换成一个整数来使用,同样如果不能转换成一个整数的时候,JS以对象属性的方式将其添加到数组上面。

数组的遍历之for循环与for/in循环的区别:

一般来说,for循环与for/in循环区别不是很大。但是,有一个很大的区别就是,一般的for循环上限是数组的长度,因而它只是取得数组可以打印出来的那些值。但是for/in循环就不同,它会额外遍历数组的属性。即将不能用整数下标引用到的,以属性方式添加到数组上的元素也遍历出来。同时for/in循环没有位置顺序特性。如下所示:

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);
两个打印语句打印出来的分别为:
--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数组新增了一些方法,稍后再总结。今天就先写到这吧。


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

每天坚持一点点...... ^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值