如何找出Javascript数组中的元素数?

如何找出Javascript数组中的元素数?,javascript,arrays,Javascript,Arrays,在ECMAScript规范中,array.length未定义为数组中的元素数 数组实例的length属性是一个数据属性,其值在数值上始终大于每个可配置的自身属性(其名称为数组索引)的名称 也就是说,Javascript引擎可以使array.length在所有情况下都为正无穷大,并且符合标准 考虑到这一点,我应该如何计算数组中的元素数?只需使用array.length。我确信没有将数组长度设置为正无穷大的标准实现 如果出于某种原因,您确实希望避免使用array.length,只需使用forEac

在ECMAScript规范中,
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