如图,很容易可以看出Array的push方法的机制就是如果对象中有length属性,那么就根据length属性在对象中插入,但是插入之后其他值的变化无法理解,比如怎么就出现了'bb'和2,大家一起讨论下
非常抱歉,我是在Chrome开发者工具中测试的,可能当时页面中有a和b两个变量,所以没去注意这个问题,非常抱歉,a,b按照字符来看待就没问题了
如图,很容易可以看出Array的push方法的机制就是如果对象中有length属性,那么就根据length属性在对象中插入,但是插入之后其他值的变化无法理解,比如怎么就出现了'bb'和2,大家一起讨论下
非常抱歉,我是在Chrome开发者工具中测试的,可能当时页面中有a和b两个变量,所以没去注意这个问题,非常抱歉,a,b按照字符来看待就没问题了
你这个a和b不是变量么?a的值是2,b的值是'bb'。
在网上找到一个push方法的实现,不知道正确与否,试了一下结果跟你一样的。
Array.prototype.push=function(){
var len=arguments.length;
if(len>0)for(var i=0;i<len;i++)this[this.length]=arguments[i];
return this.length;
}
是在当前length所表示的位置插入或覆盖当前值。
1 回答861 阅读✓ 已解决
1 回答1.1k 阅读
2 回答780 阅读
2 回答626 阅读
2 回答605 阅读
1 回答687 阅读
2 回答528 阅读
不知道楼主是不是看了我的贴发现了这道题。抱歉啊,最开始从图到文字的时候,敲错了,没把a,b加上引号。。它俩确实是个字符串。所以原题应该是:
下面说一下Array.prototype.push。
js Array 的源码好像是这个
V8
Array.prototype.push的部分貌似是这个:
另外还有一些规范性的说明:
所以说,push会根据对象length属性的值去确定插入的位置,即类似于
this[this.length]=arguments[i]。所以在原题中
obj.length值为2,调用obj.push("c")时,会发生obj[2]="c"的情况,所以最后 obj[2]就变成了'c',而不是原来的'b'。里面详细介绍了 push 方法调用时候的步骤。可以研究一下。