我正在查看另一个开发人员的一些遗留代码,我看到了这条神秘的线:
if (hasEmail) {
fields.push();
}
非常困惑。。。我认为这一行没有任何作用,因为推送没有被推送的元素,但在我删除它之前,我想知道是否有我不知道的东西,一些我从未考虑过的推送的javascript用法。
如果这就是全部代码,是的,它什么都不做。
const arr = [];
arr.push();
console.log(arr);
传递给push
的每个元素都被添加到数组的末尾。如果没有传递任何元素,则不会添加任何元素。但是,还有一件事需要考虑——push
返回数组的新长度。因此,理论上有可能(尽管在一个健全的代码库中不太可能(看到类似的东西
const arr = ['foo', 'bar'];
console.log(arr.push() * arr.push());
其中push
用于获取数组的长度,因此在删除该表达式之前,请确保该表达式未被使用。
虽然第一个参数在MDN上没有显示为可选的,但规范显示第一个参数确实是可选的:
https://tc39.github.io/ecma262/#sec-阵列.原型.推送
- 让O是?ToObject(此值(
- 让len去吧?ToLength(?Get(O,"length"((
- 让items是一个List,其元素按从左到右的顺序是传递给此函数调用的参数
- 让argCount是项中的元素数
- 如果len+argCount>253-1,则引发TypeError异常
- 重复,项目不为空
a。从项中移除第一个元素,并将E设为该元素的值。
b。表演Set(O,!ToString(len(,E,true(。
c。让len为len+1。
- 是否执行?Set(O,"length",len,true(
- 返回len
如果没有通过任何操作,步骤6根本不会重复。