javascript - 这个数组初始化速记是如何工作的?

标签 javascript arrays

console.log(
  Array.from({ length: 3 }, Function.call, Number)
);

根据我的理解,上面的代码将(value, index)传递给Function原型(prototype)的.call方法。

并且 .callthis 值设置为 Number

所以它完全一样:

Array.from({ length: 3 }, (value, index) => Number.call(value, index))

在 VSCode 中,我的工具提示将函数描述为:

mapfn: (v: any, k: number) => any

这就是我得到 (value, index) 的地方,假设 k 表示 key/index

但是 Number 只接受一个数字参数。所以它将接受value,并忽略index

但是valueundefined,因为数组还没有初始化。

那么代码如何生成一个数组,其中每个值都等于其索引,而不是充满 NaN

最佳答案

.call 接受的第一个参数是要调用的函数的 this 值。其余参数是函数调用时使用的普通参数。所以,这:

Number.call(value, index)

相当于:

Number(index)

Number 中的 this 值设置为 value

value 确实是未定义的,但是 Number 构造函数不关心它的调用上下文,它的 this,所以它实际上被忽略并从索引。

这是另一种看待它的方式:下面是一个名为 foo 的函数,当 .called 时,它不关心第一个参数,只接受考虑到第二个:

function foo(arg) {
  return 'foo' + arg;
}

console.log(
  foo.call('IGNORED PARAMETER', 'bar')
);

关于javascript - 这个数组初始化速记是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63948662/

相关文章:

javascript - 通过单击减去数字直到它为零

javascript - PHP 和 JQuery 添加动态输入

java - 具有静态最终限制的数组迭代

javascript - 如何缩短此 JQuery 代码

JavaScript循环从数组中随机选择

javascript - 登录表单的输入验证是否过大?开销 + "too much javascript"问题

javascript - 可查询的客户端存储

php - 从 MySQL 数据库输出数组...如何在 PHP 中删除方括号和双引号?

C - 如何从数组中提取偶数并将它们放入另一个名为 EvenNumbers 的数组中?

java - 以 HTML 形式传递字符串数组并提交给 Java Spring Controller?