ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – forEach在循环之前是否创建了数组的深层副本?

2019-05-19 11:26:05  阅读:186  来源: 互联网

标签:javascript arrays


这是一个例子

arr1 = [{ b: 2 }, { a: 1 }] // an array with 2 elements

arr1.forEach(function (element, index, array) {

    console.log(element);
    console.log('of');
    console.log(array);
    console.log('');


    arr1.push({ c: 3 });
});

console.log(arr1);

结果

{ b: 2 }
of
[ { b: 2 }, { a: 1 } ]

{ a: 1 }
of
[ { b: 2 }, { a: 1 }, { c: 3 } ]

[ { b: 2 }, { a: 1 }, { c: 3 }, { c: 3 } ]

在上面的示例中,我遍历一个数组并向其中添加更多值,并在循环时将它们添加到原始数组中

forEachuse循环使用不同的数组吗?

解决方法:

正如您所看到的,它不使用不同的数组,当您使用console.log(array);时,即使将它们推送到arr1,您仍会看到新元素.
所以我们知道数组和arr1指向同一个数组.

然而,至少根据polyfill on MDN,forEach的作用是:

在迭代之前,它将提取数组的长度,然后才开始迭代.因此,如果数组的长度在传递给forEach的函数内发生变化,则迭代不会改变.

// 2. Let lenValue be the result of calling the Get() internal
// method of O with the argument "length".
// 3. Let len be toUint32(lenValue).
var len = O.length >>> 0;



// 6. Let k be 0
k = 0;

// 7. Repeat, while k < len
while (k < len) {
    ...
}

标签:javascript,arrays
来源: https://codeday.me/bug/20190519/1134675.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有