我知道你可以将一个数组传递给undefined
但是最近我遇到过这段代码(这是一个很好的方法来创建一个var a = Array.apply( null, { length: 3 } );
值的数组而不是空槽或孔);
apply
我无法从第二个参数开始理解这段代码是如何工作的。是否有其他语法可用于使其更容易理解的是什么?当我们将实际对象传递给For Each pt In ActiveChart.SeriesCollection(1).Points
而不是数组时,会发生什么?我们可以以某种方式将此对象转换为数组以获得此结果吗?我尝试过很多事情,但没有成功。
答案 0 :(得分:3)
哦,那太可怕了。
因此,当您将Array
作为函数调用时,它并不关心this
是什么,因此您可以告诉它this
是null
。
apply
的第二个参数是一个类似数组的对象,它给出了参数列表。
如果你有[0, 0, 0]
那么就像这个对象:
{
0: 0,
1: 0,
2: 0,
length: 3
}
...因为数组获得的长度属性等于其最高索引的值。一个真实的数组会从原型中获得其他属性,但我们(以及apply
和Array
)并不关心它们。
您传递给Array
的参数将成为其初始值。
现在,似乎(内部)Array
检查其length
的{{1}},然后使用以下内容设置其内部值:
arguments
如果你有一个仅由for (var i = 0; i < arguments.length; i++) {
internal_array_values.push(arguments[0])
}
组成的对象,它将获得{ length: 3 }
作为这三个参数中每个参数的值undefined
。
答案 1 :(得分:1)
http://www.2ality.com/2012/07/apply-tricks.html
使用apply
和Array
(可以用作函数或构造函数),可以将空洞转换为未定义的元素:
Array.apply(null, ["a",,"b"])
// [ 'a', undefined, 'b' ]