Array.prototype.push
2021-04-13 本文已影响0人
小杰66
MDN描述如下
push方法将值追加到数组中。
push
方法具有通用性。该方法和 call()
或 apply()
一起使用时,可应用在类似数组的对象上。push
方法根据 length
属性来决定从哪里开始插入给定的值。如果 length
不能被转成一个数值,则插入的元素索引为 0,包括 length
不存在时。当 length
不存在时,将会创建它。
唯一的原生类数组(array-like)对象是 Strings
,尽管如此,它们并不适用该方法,因为字符串是不可改变的。
总结一下push函数就是取length值作为属性来赋值,然后将length属性值加1。
var a = [1];
a.length = 2;
a.push(2);
console.log(a, a.length); // [1,empty,2] 3
var a = [1];
a.length = 0;
a.push(2);
console.log(a, a.length); //[2] 1
如何是作用于类数组没有length属性或属性值无法隐式转换成数字的,会将length属性设为0。
var obj = {
2: 3,
3: 4,
length: 2,
};
Array.prototype.push.call(obj, 1); //length为2 赋值1给key为2的属性
Array.prototype.push.call(obj, 2); //length为3 赋值2给key为3的属性
console.log(obj); //{ '2': 1, '3': 2, length: 4 }
var obj = {
2: 3,
};
Array.prototype.push.call(obj, 1);
console.log(obj); // { '0': 1, '2': 3, length: 1 }