如何找出Javascript数组中的元素数?
在ECMAScript规范中,如何找出Javascript数组中的元素数?,javascript,arrays,Javascript,Arrays,在ECMAScript规范中,array.length未定义为数组中的元素数 数组实例的length属性是一个数据属性,其值在数值上始终大于每个可配置的自身属性(其名称为数组索引)的名称 也就是说,Javascript引擎可以使array.length在所有情况下都为正无穷大,并且符合标准 考虑到这一点,我应该如何计算数组中的元素数?只需使用array.length。我确信没有将数组长度设置为正无穷大的标准实现 如果出于某种原因,您确实希望避免使用array.length,只需使用forEac
array.length
未定义为数组中的元素数
数组实例的length属性是一个数据属性,其值在数值上始终大于每个可配置的自身属性(其名称为数组索引)的名称
也就是说,Javascript引擎可以使array.length
在所有情况下都为正无穷大,并且符合标准
考虑到这一点,我应该如何计算数组中的元素数?只需使用
array.length
。我确信没有将数组长度设置为正无穷大的标准实现
如果出于某种原因,您确实希望避免使用array.length
,只需使用forEach
var arrLength = 0;
arr.forEach(function() {
arrLength++
})
这不是
length
属性的唯一规范
抽象操作的规范说明,length
属性被初始化为length
参数
的规范说明了它是如何更新的:
具体来说,每当添加名称为数组索引的自有属性时,如果需要,length属性的值将更改为比该数组索引的数值多一个
其他数组操作是根据这些操作定义的,因此
length
属性应该准确反映数组元素的索引。更改。Chrome阻止length
属性。运行以下命令:
var x=[];
x、 长度=+无穷大;//未捕获范围错误:无效数组长度
根据我从您的问题中了解到的情况,您担心有人会覆盖array.length
属性。对吗?如果是这样的话,那么只需使用任何forEach
像@RedMercury explained或for in
在数组上循环并计算长度。至少Chrome拒绝将数组设置为无限长:Uncaught RangeError:无效数组长度
。这是一个非常重要的理论问题:我知道在实践中,array.length与数组中的元素数有很强的关系;x、 长度=10代码>和您的函数迭代10次,而不是1次。另外,vary=[9,10,14];y、 长度=1;控制台日志(y)
仅显示[9]
@Seb,这在x
数组的两个帐户上实际上都是错误的,上面给出的arrLength
为1
。对于y
数组,将数组的长度设置为较低会截断它。您确实在从中删除值10
和14
,因为您说数组中只有一个项目。我的错,我没有检查它。但是.shift()
和.pop()
将产生不同的结果。@Seb是的,它们会产生不同的结果,因为增加数组的长度也会…增加数组的长度。但事实并非如此。出于许多意图和目的var x=[];x、 长度=10
将是(或类似于)一个数组,其中包含10个项,所有项都是未定义的
。然而,像forEach
或map
这样的东西实际上并没有经过未设置的插槽,因此@RedMercury的代码不会给出与.length
相同的数字。如果您这样做,比如说,varx=[];x[9]=1代码>-您将得到一个长度为10的数组,但是那里的forEach
计数将为您提供1
@Vld,是的,您是对的。这使得这个解决方案非常有效。幸运的是,在我的工作中,我没有遇到在数组中使用length
。