自ECMA-262第3版推出以来,该Array.prototype.push
方法的返回值为Number
:
15.4.4.7 Array.prototype.push([item1 [,item2 [,...]]])
参数按照它们出现的顺序附加到数组的末尾.作为调用的结果,返回数组的新长度.
返回数组的新长度背后的设计决策是什么,而不是返回可能更有用的东西,例如:
对新添加的项目的引用
变异数组本身
为什么这样做,并且是否有关于如何做出这些决定的历史记录?
我将其发布在TC39的通信中心中,并且能够进一步了解其背后的历史:
push
,pop
,shift
,unshift
最初在1997年加入到JS1.2(网景4)。在Perl中以类似命名的函数为模型。
JS1.2 push遵循Perl 4约定,该约定返回最后推送的项目。在JS1.3(1998年夏季的Netscape 4.06)中,更改了推力,以遵循返回数组新长度的Perl 5约定。
参见https://dxr.mozilla.org/classic/source/js/src/jsarray.c#804
/* * If JS1.2, follow Perl4 by returning the last thing pushed. Otherwise, * return the new array length. */