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

Javascript 链接数组方法和推送的有趣问题,javascript,push,Javascript,Push,早些时候在处理一些数组的东西时发现了一个非常奇怪的警告 考虑以下代码: [1,2,3].map(函数(el){returnel 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(

早些时候在处理一些数组的东西时发现了一个非常奇怪的警告

考虑以下代码:

[1,2,3].map(函数(el){returnel 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是number,因此
.join
抛出,因为它不在number proto中

似乎可以传递/链接任何其他数组方法,但不能推送。虽然这不是一个问题,如果将结果传递到一个变量中,它会工作,但为什么会按原样中断,为什么会在这里返回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时刻

为什么在这里返回长度属性

定义如下:

参数将按其出现的顺序追加到数组的末尾。数组的新长度作为调用的结果返回

为什么会这样破碎


嗯,你自己已经回答过了:
.push
返回新的长度,
。join
不是为数字定义的。

啊,那么这是预期的行为?为此,我想问一下,为什么返回长度而不是数组(如果需要,数组将包含长度属性以供检查)会被认为是有用的?这似乎是一个奇怪的架构决定。我不能告诉你为什么他们决定这么做,我只能做出假设。一个原因可能是没有理由返回对数组的引用,因为
.push
会将数组更改到位。