22.1 数组对象
22.1.3 数组原型对象上的属性
22.1.3.20 Array.prototype.push(...items)
注意1:参数是添加到数组的末尾,插入的顺序取决于参数的位置。这个函数的结果作为数组的新长度
当push方法以0个或多个参数调用时,执行步骤如下:
```
Let O be ? ToObject(this value).
Let len be ? ToLength(? Get(O, "length")).
Let items be a List whose elements are, in left to right order, the arguments that were passed to this function invocation.
Let argCount be the number of elements in items.
If len + argCount > 2^53 - 1, throw a TypeError exception.
6 Repeat, while items is not empty
Remove the first element from items and let E be the value of the element.
Perform ? Set(O, ! ToString(len), E, true).
Increase len by 1.
Perform ? Set(O, "length", len, true).
Return len.
```
简单概括就是:循环遍历参数,把参数的值设置为O[length++]= v,length随着循环+1,返回值为length。
注意2:push方法故意设计成通用的,不要求当前的this是一个数组对象,所以他可以被其他类型的对象调用,因为push的最终操作是往this对象上添加属性