【发布时间】:2016-05-08 02:51:01
【问题描述】:
查看一些 javascript 代码,我看到了(类似的):
var arr = Array.apply(null, {length: 10});
阅读 Function.prototype.apply() 的 MDN 文档后,我了解到虽然它通常需要一个数组作为其第二个参数,该数组是要传递给被调用函数的参数数组,
您也可以使用任何类型的类似数组的对象,因此在实践中这意味着它将具有属性长度和范围内的整数属性(0...长度)。
所以据我所知,它调用 Array() 就好像它传递了 10 个参数,但由于它没有定义任何这些“整数属性”,就好像它传递了 10 个未定义的参数。 正确吗?
console.log(arr);
产量
[未定义, 不明确的, 不明确的, 不明确的, 不明确的, 不明确的, 不明确的, 不明确的, 不明确的, 未定义]
这与结果完全不同
var barr = new Array(10);
console.log(barr);
这是
[ , , , , , , , , , ]
这些数组的行为也不同。
console.log(arr.map(function(item) { return 'hi';}));
console.log(barr.map(function(item) { return 'hi';}));
给予
['嗨','嗨','嗨','嗨','嗨','嗨','嗨','嗨','嗨','嗨']
[ , , , , , , , , , ]
我想知道为什么第二个地图功能不起作用。所以我检查了console.log(1 in arr);,它给出了 true 和 `console.log(1 in barr);'这给了 false.
所以我目前的猜测是,arr 是一个数组,其中包含 10 个作为整数属性的变量,每个变量的值都为 undefined,而 barr 是一个数组,虽然它的长度为 10,但具有没有整数属性。 Array.apply 之所以有效,是因为它询问 {length: 10} 它的属性 0 是什么,接收 undefined,然后将 undefined 分配给该属性0 它正在构造的数组,依此类推。我的推理正确吗?真的有没有更骇人听闻的方法来定义一个数组,该数组包含其范围内每个索引的未定义整数属性,而不是根本没有整数属性?因为看这个,我觉得new Array() 没什么用。
【问题讨论】:
-
是的,
Array构造函数很少有用。
标签: javascript arrays properties