我想给数组赋值,但是为什么for-in访问不到空数组的数组元素?
var arr=new Array(2);
for(var i in arr){
arr[i]=10;
}
我想给数组赋值,但是为什么for-in访问不到空数组的数组元素?
var arr=new Array(2);
for(var i in arr){
arr[i]=10;
}
for-in 语句 可以遍历对象 自身的可枚举属性 和其 原型链上的可枚举属性。
这里得了解对象的属性描述符。。。
通过 Array(num) 生成的数组项(稀疏数组项),没有初始化生成属性描述符,就自然无法遍历。
var arr = new Array(2);
Object.getOwnPropertyDescriptor(arr, '0'); // undefined
Object.getOwnPropertyDescriptor(arr, 'length')
// {value: 2, writable: true, enumerable: false, configurable: false}
因为for in
遍历的是对象的key,空的数组是没有key的
var arr=[10,20,33,44] //var arr={'0':10,'1':20,'2':33,'3':44}
for(var i in arr){
console.log(i)//0 1 2 3
}
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。
上面代码中,Array(3)返回一个具有 3 个空位的数组。
注意,空位不是undefined,一个位置的值等于undefined,依然是有值的。空位是没有任何值,in运算符可以说明这一点。
上面代码说明,第一个数组的 0 号位置是有值的,第二个数组的 0 号位置没有值。
ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
ES6 则是明确将空位转为undefined。