javascript - Array.apply(null, Array(x) ) 和 Array(x) 之间的区别

标签 javascript

到底有什么区别:

Array(3)
// and
Array.apply(null, Array(3) )

第一个返回 [undefined x 3] 而第二个返回 [undefined, undefined, undefined]。第二个可以通过 Array.prototype.functions 链接,例如 .map,但第一个不是。为什么?

最佳答案

有一个区别,一个非常重要的区别。

Array 构造函数 either 接受一个数字,给出数组的长度,并创建一个具有“空”索引的数组,或者更准确地说,长度已设置,但数组实际上并不包含任何内容

Array(3); // creates [], with a length of 3

当以数字作为唯一参数调用数组构造函数时,您创建了一个空数组,并且无法使用通常的 Array 方法对其进行迭代。

或者... Array 构造函数接受多个参数,而创建一个数组,其中每个参数都是数组中的一个值

Array(1,2,3); // creates an array [1,2,3] etc.

当你调用它时

Array.apply(null, Array(3) )

它变得更有趣了。

apply 接受 this 值作为第一个参数,由于它在这里没有用,它被设置为 null

有趣的部分是第二个参数,其中传入了一个空数组。
apply 接受一个数组时,它就像调用

Array(undefined, undefined, undefined);

这会创建一个包含三个非空索引的数组,但其值实际设置为 undefined,这就是它可以迭代的原因。

长话短说
主要区别在于 Array(3) 创建了一个包含三个空索引的数组。事实上,它们并不真正存在,数组的长度只有3

使用 apply 将这样一个带有空索引的数组传递给 Array 构造函数与执行 Array(undefined, undefined, undefined); 相同,它会创建一个数组具有三个 undefined 索引,而 undefined 实际上是一个值,因此它不像第一个示例中那样为空。

map() 等数组方法只能迭代实际值,不能迭代空索引。

关于javascript - Array.apply(null, Array(x) ) 和 Array(x) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349093/

相关文章:

javascript - 刷新后检索子窗口引用

javascript - Vue - 循环遍历对象数组,并在单击时突出显示所选项目

javascript - 如何使用正则表达式可以为空?

javascript - 如何对数据表进行排序?

javascript - routerLink 带有单行 if 和子路由

javascript - 如何向数组中的项目添加一列?

javascript - Jquery - 每个循环在点击事件中不起作用

javascript - 带一个参数的反向数组函数。 (JavaScript)

javascript - 如何将序列化的 JSON 字符串包装在 'single quotes' 中

javascript - 缩小时的变量