js每日一题01

每日一题

代码如下,请给出执行结果并说明原因

let obj = {
	2:3,
	3:4,
	length: 2,
	push: Array.prototype.push
}
obj.push(1)
obj.push(2)
console.log(obj)

执行结果

点击查看结果

image

题目解析

1、首先obj调用push方法,走的是数组的push方法(即每次都在最后一项添加值)。那么问题来了,数组的push方法到底是怎么实现的呢?

Array.prototype.push = function(val) {
	//val是push传入的值
	this[this.length] = val
	this.length++
}

可以看出,数组push就做个两个操作:

  1. 赋值:数组的最后一项插入并赋值为val,也就是数组的第length项为val
  2. 赋值之后,数组长度加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
}
posted @ 2021-11-27 19:39  卖萌实习生  阅读(126)  评论(0)    收藏  举报