2
有趣的问题是,与之前一些阵列东西乱搞,发现一个非常奇特的警告与链阵列的方法,推动
考虑下面的代码:
[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
抛出,因为它不是在数原。
看来你可以传递/链任何其他数组方法,但不推动。虽然这不是问题,但如果将结果传递给变量,它会起作用,为什么按照原样打开,为什么返回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'就地改变了数组*。 –