gpt4 book ai didi

JavaScript 映射减少 : weird behavior

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:16:37 26 4
gpt4 key购买 nike

var t = [-12, 57, 22, 12, -120, -3];

t.map(Math.abs).reduce(function(current, previousResult) {
return Math.min(current, previousResult);
}); // returns 3

t.map(Math.abs).reduce(Math.min); // returns NaN

我不明白为什么第二种形式不起作用。欢迎任何解释。

编辑:技术背景:Chrome 和 Firefox JavaScript 引擎。参见 ES5 减少 http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.21

最佳答案

Math.min接受多个参数。这与它对 parseInt 或其他类似函数不起作用的原因完全相同。需要自己绑定(bind)参数。

reduce 将 indexarray 等值提供给 Math.min

如果我们遵循以下步骤,我们可以确认这一点:

首先,我们代理 Math.min:

var oldMath = Math.min;
Math.min = function (){
console.log(arguments)
return oldMath.apply(Math, arguments);
}

然后我们运行第二个版本:

[-12, 57, 22, 12, -120, -3].reduce(Math.min);

哪些日志:

[-12, 57, 1, Array[6]]

因为 Array[6] 不是数字,所以结果是 NaN


这是来自 MDN 的一个非常相似的例子:

["1", "2", "3"].map(parseInt);

虽然人们可以期待 [1, 2, 3] 实际结果为[1, NaN, NaN]

parseInt 通常与一个参数一起使用,但需要两个参数。第二个是基数 Array.prototype.map 向回调函数传递 3 个参数:元素、索引、数组 parseInt 会忽略第三个参数,但不会忽略第二个参数,因此可能会造成混淆。

关于JavaScript 映射减少 : weird behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com