这个程序:
var arr = [];
arr[100] = "foo";
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
输出:
(101) [undefined × 100, "foo"]
Run Code Online (Sandbox Code Playgroud)
但是,这个程序:
var arr = [];
for(var i = 0; i < 101; i++) {
arr[i] = (i === 100 ? "foo" : undefined);
}
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
输出这个("foo"当然最终有):
(101) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined…]
Run Code Online (Sandbox Code Playgroud)
我可能会挑剔,但我只是想确定,为什么输出不同?两个阵列不应该相同吗?
在Chrome版本58中运行.
他们不等同.
第一个是稀疏的,只有一个成员在索引处100.第二个有101个成员,其中大多数是价值undefined.
稀疏数组是指成员少于.length建议的数组.所以,如果你有一个数组,其中.length的101所有指标有一个值,它不是稀疏的,但如果有"洞"里的实际索引/值丢失,这是一个稀疏数组.
要检查是否数组是稀疏的,你可以比较其.length对.length结果的Object.keys.
var isSparse = arr.length !== Object.keys(arr).length;
Run Code Online (Sandbox Code Playgroud)
要检查是否实际定义了单个成员,请使用in运算符:3 in arr或.hasOwnProperty()方法:arr.hasOwnProperty(3)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |