js每日一题01
每日一题
代码如下,请给出执行结果并说明原因
let obj = {
2:3,
3:4,
length: 2,
push: Array.prototype.push
}
obj.push(1)
obj.push(2)
console.log(obj)
执行结果
点击查看结果

题目解析
1、首先obj调用push方法,走的是数组的push方法(即每次都在最后一项添加值)。那么问题来了,数组的push方法到底是怎么实现的呢?
Array.prototype.push = function(val) {
//val是push传入的值
this[this.length] = val
this.length++
}
可以看出,数组push就做个两个操作:
- 赋值:数组的最后一项插入并赋值为val,也就是数组的第length项为val
- 赋值之后,数组长度加1
那么回到题目里,执行obj.push(1),此时obj.length 为2,也就是obj[2] = 1,obj.length 加1
let obj = {
2:3,
3:4,
length: 2,
push: Array.prototype.push
}
obj.push(1) //此时obj= {2:1,3:4,length: 3,push: Array.prototype.push}
obj.push(2)
console.log(obj)
接着执行obj.push(2),那么显而易见,obj[3] 就是2了,obj.length 需要加1,变成了4
最终obj的结果就是
obj = {
2:1,
3:2,
length: 4,
push: Array.prototype.push
}

浙公网安备 33010602011771号