眼趣

文章 评论 浏览 28

眼趣 2022-05-04 13:56:53

解这道题需要去了解Array.prototype.push 在V8下如何实现的

这是V8的push实现代码:

function ArrayPush () {
var n = TO_UNIT32(this.length);
var m = %_ArgumentsLength();
for (var i = 0; i < m; i++) { // 逐个复制元素
this[i + n ] = %_Arguments(i);
}
this.length = n + m; // 修改数组的length
return this.length;
}

通过代码我们知道会先获取原数组长度 n, 然后开始从下标n循环赋值:this[i+n]。this.length重新赋值为原数组长度加新push参数的长度,所以就能理解 {2:1, 3:2,length:4}是怎么来的了。

empty x 2则是因为下标从2开始,0和1都是空的,和数组一样如图:

同时应该也能明白 push(...[])为什么能push多个的原理了

第 46 题:输出以下代码执行的结果并解释为什么?

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文