非稀疏数组中的数组索引问题

Javascript - array index issue in non sparse array

本文关键字:数组 索引 问题      更新时间:2023-09-26

非稀疏数组本质上是连续的,并且从0到长度-1,对于'in'操作符,所有索引都应该返回true。对于空元素也应该为真。

obj1 = {x:1,y:2};
obj2 = Object.create(obj1);
obj2.z = 5;
var arr = [obj1,obj2,1,,2];
console.log(arr.length); //5
console.log(3 in arr);//false

索引3是有效的。为什么返回false?

注意:我用的是最新的firefox。

对于没有指定索引数3的稀疏数组,它应该返回false。

Update: index 3是有效的,所以它应该返回true。In运算符不验证索引位置的值,它只验证索引的有效性而不是

3 in arrfalse,因为arr[3]从未设置(因此数组确实是稀疏的)。

注意

中的双逗号
var arr = [obj1,obj2,1,,2];

mdash;如果你写

var arr = [obj1,obj2,1,2];

3 in arr变为true

见规范第63页:

数组元素可以在元素列表的开头、中间或末尾被省略。的逗号元素列表的前面不能有AssignmentExpression(即逗号在开头或后面)逗号),缺少的数组元素会增加数组的长度,并增加的索引随后的元素。省略的数组元素没有定义。如果数组末尾省略了一个元素,

mdash;换句话说,代码的行为与

相同
var arr = [obj1, obj2, 1];
arr[4] = 2;

Javascript正在计算未定义的值。

数组总是以0为基础的索引,在你的数组第4个元素(3按索引)不被设置为任何值。

这个

Refere

从链接

下面是JavaScript中的错误:

  • 定义
  • 空字符串
  • "
  • 数字0数字NaN(是的,"不是数字"是一个数字,它是一个特殊的数字)

其他一切都是真理,包括无限(它是)另一个特殊的数字,如NaN),以及所有Object对象和Array对象,空或不空