一个数组长度问题引发的思考

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值