非稀疏数组中的数组索引问题
Javascript - array index issue in non sparse array
非稀疏数组本质上是连续的,并且从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 arr
是false
,因为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对象,空或不空
相关文章:
- 按最大值获取数组索引
- 删除和重用数组索引
- 警报数组索引和值
- .fadeIn .fadeOut 会导致数组索引出现奇怪的行为
- Javascript原型通用Enquries和通过数组索引分配Id
- 获取数组索引的值
- Javascript-将值与关联数组索引进行比较
- Javascript-在数组索引中循环的问题
- JavaScript - “规范化”数组索引
- 数组索引混淆
- 使用 Javascript/React.js 查找对象的数组索引
- 如何拆分数组索引
- 获取新推送元素的数组索引
- 在 javascript 中将数组索引作为参数传递
- 当对象本身存储在 JavaScript 的数组索引中时,如何打印对象的每个单独属性
- 如何使用数组索引序列
- ASP.NET/JavaScript:数组索引溢出:实体框架/LINQ
- 如何在分配给数组索引的对象上调用方法
- 使用铆钉访问数组索引.js
- 计算 Javascript 数组索引的出现次数