javascript - 什么是 Array.map(Function.call,Number)

标签 javascript

var array1 = [1, 4, 9, 16];

map1=array1.map(Function.call,Number);

为什么map1的输出是[0,1,2,3],这个map函数是干什么的?

最佳答案

Array.prototype.map调用为数组的每个成员提供的函数,并返回一个由它们的返回值组成的新数组。

在这种情况下,提供的函数是 Function.call .

Array.prototype.map 的第二个参数指定所提供的函数应该运行的上下文。

在这种情况下,上下文是 Number .

Array.prototype.map 的简单实现可能类似于:

function map(callback, thisArg) {
  const ret = []
  for (let index = 0; index < this.length; index++) {
    const value = this[index]
    ret.push(callback.call(thisArg, value, index, this))
  }
  return ret
}

现在,这个特殊情况使用了很多间接寻址,所以不容易理解为什么传递 Function.callNumber 应该返回 [0, 1, 2, 3],让我们看一下那部分。

回调(Function.call)在thisArg(Number)的上下文中调用时该代码将执行以下内容:

(Function.call).call((Number), (1), (0), ([1, 4, 9, 16]))
//   ^-- callback               ^-- value ^-- array
//                    ^-- thisArg    ^-- index

评估 Function.call.call(...) 有点费脑筋,但它相当于在第一个参数,应该是一个函数。在我们的例子中,它是。这是 Number 函数。

然后我们可以将此语句简化为:

Number.call(1, 0, [1, 4, 9, 16])

Number 函数将第一个参数转换为数字。其他参数与函数上下文一起被忽略。这意味着整个表达式可以简化为:

Number(0)

0索引

这就是返回值为 [0, 1, 2, 3] 的原因,因为这些是原始数组的索引。


不用说,原始代码示例不应该在日常编程中使用。整个系统使用起来会更简单:

[1, 4, 9, 16].map((value, index) => index)

即便如此,也应该注意原始值被无用地丢弃了。此类代码示例仅在探索特定语言行为的学术意义上有用,或者当您想在编码挑战中故意混淆您的 friend 时。

关于javascript - 什么是 Array.map(Function.call,Number),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478967/

相关文章:

javascript - Sencha 触摸 : How to implement xForms with Sencha Touch?

c# - 单选按钮更改值不更新隐藏字段?

javascript - 如何在 div 面板中滚动到 JSON 中的行号?

javascript - 尝试匹配名字标题..或不匹配,视情况而定

javascript - 在 jQuery on() 中组合多个操作

javascript - 在不使用同步请求的情况下按照发送的相同顺序显示 AJAX 响应

javascript - 商店中的 IDPROPERTY FOR COMBINED ID's

javascript - 在钛手机中打开没有模式属性的新窗口时如何显示标题/导航栏?

javascript - 仅在特定宽度以下应用 Javascript

javascript - 如何按与作为参数的给定键相同的键数对对象数组进行排序?