早些时候搞乱了一些数组,发现了一个非常奇怪的警告
考虑这段代码:
[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
会抛出,因为它不在数字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时刻......
答案 0 :(得分:3)
中定义为什么要在这里返回长度属性?
参数将按照它们出现的顺序附加到数组的末尾。作为调用的结果,返回数组的新长度。
为什么要按原样打破?
嗯,您自己已经回答了这个问题:.push
返回新的长度,并且没有为数字定义.join
。