您的位置:首页 > Web前端 > JavaScript

【JS复习笔记】04 数组

2016-01-22 00:43 337 查看
JS里的数组其实并不是一个数组,它其实是一个对象,a[1]这种调用方式其实就是一个字面量为1的属性。

因为这东西实际上是一个对象,所以你就可以理解下面这种声明了吧!

var arrName=['我可以是一个字符串',1,true,null,undefined,[1,'23'],{name:'123'},NaN,Infinity];


关于数组长度

数组长度:arrName.length。

数组长度没有上界,如果你用一个大于length的数组下标来存储一个元素,那么数组长度会变大以容纳新元素,不会发生越界错误。

数组的length其实并不是表示数组的元素个数,它实际上表示的是数组的最大整数下标+1。

var arrName=[]
arrName[10000]=1;


就比如上面这段代码中arrName.length为10001,但是实际上你知道的,它只有一个元素。

给arrName.length赋值,如果大于当前值,也不会分配更多空间,如果小于当前值,比如新值为100,会导致下标大于且等于100的的元素被删除掉。

关于数组元素的删除

前面讲到对象的删除为 delete obj.name或者 delte myObj["name"],而又说道数组其实是一个对象那么当然也是可以delete arrName[2];

但是你要知道delete方法过后arrName[2]成了undefined,但是arrName[1]和arrName[3]值不变

然而我们脑海中的数组元素的删除通常是想要arrName[3]前移去替代arrName[2]的位置

所以JS提供了splice这种方法,arrName.splice(2,3),就是删除下标为2的元素开始的三个元素。当然对于大型数组来说效率不高。

var arrName=[1,2,3,4,5,6];
arrName.length=50
arrName.splice(2,3);//删除后数组为[1,2,6,undefined。。。],arrName.length为47


关于判断一个值是否为数组 

var isArray=function(value){
return value && typeof value==='object' && value.constructor===Array;
};


但是上面的方法在识别不同窗口或frame里构造的数组时会失败,所以下面有一种更好的方法

var isArray=function(value){
return Object.prototype.toString.apply(value)==='[Object Array]';
};


好吧,这种鬼东西记在这里就得了,别记在脑子里,毕竟容量有限。

关于数组的属性与方法

前面说过了,数组实际上就是对象。那么给数组添加方法和属性都可以像对象那样。

有一点要注意的是,arrName.myName这种属性添加后,arrName.length并没有改变,因为这并不是一个整数类型的属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: