首页 > 解决方案 > 复制或切片数组与创建与现有变量相等的变量有什么需要?

问题描述

let a = {"foo": 99};
let b = a;
// console.log(b)  {"foo": 99}

a.foo = 33;
// console.log(b)  {"foo": 33}

我在上面的场景中了解到,如果我使用对象,引用原始对象的变量将反映原始对象的值。

但是如果我用数组这样做:

let a = [1,2,3];
let b = a;

a = [99,99,99];
// console.log(b) [1,2,3];

即使更改后变量b仍然引用原始值,那么通过服务创建副本的人会怎样?aaslice()

标签: javascript

解决方案


这是因为,通过这样做a = [99, 99, 99],您正在创建一个全新的对象,并“重置” a。但是在这样做时a.foo = 33,您正在修改现有对象和对它的引用。

你可以看到,当我设置a[0]而不是ab仍然等于a

let a = [1, 2, 3];
let b = a;

a[0] = [99, 99, 99];
console.log(b);

使用该slice()方法时,b保留a的原始值。

例子:

let a = [1, 2, 3];
let b = a;

a = a.slice(2);
console.log(a, b);


推荐阅读