如图,很容易可以看出Array的push方法的机制就是如果对象中有length属性,那么就根据length属性在对象中插入,但是插入之后其他值的变化无法理解,比如怎么就出现了'bb'和2,大家一起讨论下
非常抱歉,我是在Chrome开发者工具中测试的,可能当时页面中有a和b两个变量,所以没去注意这个问题,非常抱歉,a,b按照字符来看待就没问题了
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
不知道楼主是不是看了我的贴发现了这道题。抱歉啊,最开始从图到文字的时候,敲错了,没把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 方法调用时候的步骤。可以研究一下。
你这个a和b不是变量么?a的值是2,b的值是'bb'。
在网上找到一个push方法的实现,不知道正确与否,试了一下结果跟你一样的。
是在当前length所表示的位置插入或覆盖当前值。
你这样问问题会误导别人的,你的a和b如果不是变量的话,你上面的语句是根本没有办法执行的。
同意楼上的意见,你自己再仔细看看题目是不是完全
这个题是javascript中伪数组的问题,建议你查看大犀牛中的解释
http://yanhaijing.com/es5/#349