JS关于对象赋值的坑

264 阅读1分钟

如果等式右边包含对象, js的处理并不会简单的讲右边的值赋给左边,而是会变成引用赋值。

let a = {'age':10,'gender':'male'};
let b = a;
b.age = 20;
console.log(a,b);

//a输出如下
{age: 20, gender: "male"} 

//输出如下
{age: 20, gender: "male"}

而有时候我们不想要这种结果,我们是想将a的值赋值给b,然后将b作为一个新的变量进行使用,而不变更b。也就是,我们想要如下结果

console.log(a,b);

{age: 10, gender: "male"} //a

{age: 20, gender: "male"} //b

那么我们如何实现这种值赋值而不引用呢。这里要用到字符串转换来进行一次交接。

let a = {'age':10,'gender':'male'};
let b = JSON.parse(JSON.stringify(a));
b.age = 20;
console.log(a,b);

//此时输出
{age: 10, gender: "male"} //a
{age: 20, gender: "male"} //b

这样就是我们想要的结果了。