gpt4 book ai didi

javascript - 链接数组方法和推送的有趣问题

转载 作者:行者123 更新时间:2023-11-29 20:14:44 30 4
gpt4 key购买 nike

之前在弄乱一些数组的东西,发现了一个非常奇怪的警告

考虑这段代码:

[1,2,3].map(function(el) { return el * 2}).push(4*2).join("");

在编写它时,我希望得到:2, 4, 6, 8

相反,它抛出了一个异常。在进一步调查中,.push 返回传递数组的调整后的 .length:

[1,2,3].map(function(el) { return el * 2}).push(4*2);
>>> 4

[1,2,3,4].map(function(el) { return el * 2}).push("hi");
>>> 5

并且 typeof 是数字,所以 .join 抛出,因为它不在数字原型(prototype)中。

您似乎可以传递/链接任何其他数组方法,但不能推送。虽然这不是问题,并且如果将结果传递给变量它会起作用,但为什么会按原样中断以及为什么要在此处返回 length 属性?

这很好用...

var foo = [1,2,3,4].map(function(el) { return el * 2});
foo.push(5*2);
console.log(foo);
>>> [2, 4, 6, 8, 10];

可能是另一个 wtfjs 时刻......

最佳答案

Why is the length property being returned here?

它在 specification 中定义:

The arguments are appended to the end of the array, in the order in which they appear. The new length of the array is returned as the result of the call.

Why is breaking as is?

好吧,你自己已经回答了这个问题:.push 返回新的长度并且 .join 没有为数字定义。

关于javascript - 链接数组方法和推送的有趣问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684869/

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