var arr = [];
arr[0] = 0;
arr[1] = 1;
arr.foo = 'c';
console.log(arr.length);
为什么.length不会把foo算进数组长度?进一步思考为什么关联数组没有数组长度?
var arr = [];
arr[5] = 1;
arr.foo = 'c';
console.log(arr.length);
结合这两个个例子,不难看出,.length貌似是通过数组最大的下标数字然后+1再输出数组长度的,然后我们可以知道数组里确实是含有foo这个属性的且值为c
所以.length到底是个什么玩意这不是坑我吗?
回溯w3c数组对象:
length 属性可设置或返回数组中元素的数目。
说明
-
数组的 length 属性总是比数组中定义的最后一个元素的下标大 1。对于那些具有连续元素,而且以元素 0 开始的常规数组而言,属性 length 声明了数组中的元素的个数。
-
数组的 length 属性在用构造函数 Array() 创建数组时被初始化。给数组添加新元素时,如果必要,将更新 length 的值.
-
设置 length属性可改变数组的大小。如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失。如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为
undefined。 -
使用 for…in 声明来循环输出数组中的元素。
-
"对于那些具有连续元素,而且以元素 0 开始的常规数组而言,属性 length 声明了数组中的元素的个数。"
真需要算数组有多少内容是需要自己封装一个函数
不过设置length
为0之后数组的内容会被清空
再说关联数组
结合上面说的.length和for……in
脑海里总是浮现’js一切皆对象’这句话,加上有人说js对象本质是关联数组
???
关联数组创建方式
var arr = []
arr['a'] = 1;
arr['b'] = 2;
console.log(arr);
然后对象创建方式
var arr = {}
'a':1;
'b':2;
console.log(arr);
关联数组的本质是对象
回想js里数据类型
五种基本数据类型(String、Number、Boolean、Null、Undefined)
然后就只剩object