我正在查看另一位开发人员的一些旧代码,我看到了这条神秘的线:
if (hasEmail) {
fields.push();
}
非常困惑...我想这行什么也不做,因为push没有要推送的元素,但是在删除它之前,我想知道是否有一些我不知道的东西,一些javascript用法推我从未考虑过。
答案 0 :(得分:2)
如果仅此而已,是的,它什么也没做。
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-array.prototype.push
- 让我们成为吗? ToObject(此值)。
- 让我成为吗? ToLength(?Get(O,“ length”))。
- 让项成为一个List,其元素按从左到右的顺序是传递给此函数调用的参数。
- 让argCount为项目中的元素数量。
- 如果len + argCount> 253-1,则抛出TypeError异常。
- 重复,而项目不为空
a。从项目中删除第一个元素,并让E为元素的值。
b。执行? Set(O,!ToString(len),E,true)。
c。令len为len + 1。
- 执行?设置(O,“长度”,len,true)。
- 返回len。
什么都不做,步骤6根本不重复。