空的javascript .push()会做什么吗?

时间:2018-07-28 21:04:00

标签: javascript arrays

我正在查看另一位开发人员的一些旧代码,我看到了这条神秘的线:

if (hasEmail) {
        fields.push();
}

非常困惑...我想这行什么也不做,因为push没有要推送的元素,但是在删除它之前,我想知道是否有一些我不知道的东西,一些javascript用法推我从未考虑过。

1 个答案:

答案 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

  
      
  1. 让我们成为吗? ToObject(此值)。
  2.   
  3. 让我成为吗? ToLength(?Get(O,“ length”))。
  4.   
  5. 让项成为一个List,其元素按从左到右的顺序是传递给此函数调用的参数。
  6.   
  7. 让argCount为项目中的元素数量。
  8.   
  9. 如果len + argCount> 253-1,则抛出TypeError异常。
  10.   
  11. 重复,而项目不为空
  12.   
     

a。从项目中删除第一个元素,并让E为元素的值。

     

b。执行? Set(O,!ToString(len),E,true)。

     

c。令len为len + 1。

     
      
  1. 执行?设置(O,“长度”,len,true)。
  2.   
  3. 返回len。
  4.   

什么都不做,步骤6根本不重复。