gpt4 book ai didi

javascript - 为什么推送到一个数组会影响另一个数组?

转载 作者:行者123 更新时间:2023-12-01 03:33:47 25 4
gpt4 key购买 nike

考虑以下代码片段:

var arr1 = "john".split('');
console.log(arr1); // [ 'j', 'o', 'h', 'n' ]
var arr2 = arr1.reverse();
console.log(arr1); // [ 'n', 'h', 'o', 'j' ]
var arr3 = "jones".split('');
arr2.push(arr3);
console.log(arr1); // [ 'n', 'h', 'o', 'j', [ 'j', 'o', 'n', 'e', 's' ] ]

在最后一个console.log中,为什么推送到arr2会影响arr1?为什么arr1不修改时就变了,只有arr2修改了?

最佳答案

JavaScript 中的 reverse() 方法 mutates the array 。这意味着它会更改 arr1 变量中的数据,然后返回对该数组的引用。所以arr2只是对arr1的引用,而不是一组新的数据。

如果您想要全新的数据,您可以按照此 StackOverflow question 中的说明进行操作:

var arr2 = arr1.slice().reverse();

这将切片一组新数据,然后反转它,从而返回一个新数组而不是对第一个数组的引用。

示例:

var array = ['a', 'b', 'c', 'd', 'e'];

var notmutated = array.slice();
console.log('not mutated:', notmutated);

var mutated = array.reverse();
console.log('mutated: ', array);

关于javascript - 为什么推送到一个数组会影响另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com