当前位置:  开发笔记 > 编程语言 > 正文

为什么javascript为具有object属性而不是indexed元素的数组显示0长度

如何解决《为什么javascript为具有object属性而不是indexed元素的数组显示0长度》经验,为你挑选了1个好方法。

例如:

var arr = [];
arr[3.4] = 1;
console.log(arr.length);

在上面的代码示例中,length属性为零,为什么以及JS解析器内部发生了什么,因为它的长度为零.



1> apsillers..:

数组length反映了数组中存在的最大数组索引."数组索引"(见下文)是一个属性名称,它是一个小于2 32 -1 的整数值.由于3.4不是整数,因此设置它不会改变length.

数组是对象,因此没有理由说数组不能有一个名为的属性3.4,但该属性不会影响它,length因为它的名称不符合数组索引的条件.

ES2015 9.4.2,Array Exotic Objects将"数组索引"定义为小于2 32 -1 的整数:

当且仅当ToString(ToUint32(P))等于P并且ToUint32(P)不等于2 32 -1时,属性名P(以String值的形式)是数组索引.

这个定义用于length价值(强调我的):

每个Array对象都有一个length属性,其值始终是小于2 32的非负整数.length属性的值在数值上大于每个属性的名称,该属性的名称是数组索引 ; 无论何时创建或更改Array对象的自有属性,都会根据需要调整其他属性以保持此不变量.具体来说,每当添加一个名为数组索引的length属性时,如果需要,属性的值将更改为该数组索引的数值之一...

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有