Javascript 更新对象';s属性值的行为类似于对另一个对象的引用';s属性值

Javascript 更新对象';s属性值的行为类似于对另一个对象的引用';s属性值,javascript,Javascript,基本上,代码说明了一切。我有一个带有css属性的变量x。我正在将x的所有css保存到y,然后更改y属性的值。此更改也会影响x,为什么?如何使其仅传递值,以便x保持不变 var x = {}; x.css = {height: 100, width: 100}; var y = {}; y.css = x.css; y.css.height = 200; console.log(x.css.height); //equals to 200 while it should be 100 您正在

基本上,代码说明了一切。我有一个带有
css
属性的变量
x
。我正在将
x
的所有
css
保存到
y
,然后更改
y
属性的值。此更改也会影响
x
,为什么?如何使其仅传递值,以便
x
保持不变

var x = {};
x.css = {height: 100, width: 100};

var y = {};
y.css = x.css;
y.css.height = 200;

console.log(x.css.height); //equals to 200 while it should be 100

您正在创建一个对象,然后将两个不同的变量指向同一个对象。最简单的解释是,您只是给变量x另一个名称/变量访问器。查看下面的示例以了解如何克服此问题,或者您可以创建对象的副本

解决方案1:使用此技巧克隆对象

var x={};
x、 css={高度:100,宽度:100};
var y=JSON.parse(JSON.stringify(x));
y、 css.height=200;
console.log('Y Height:',Y.css.Height);

console.log('X Height:',X.css.Height)您正在创建一个对象,然后将两个不同的变量指向同一个对象。最简单的解释是,您只是给变量x另一个名称/变量访问器。查看下面的示例以了解如何克服此问题,或者您可以创建对象的副本

解决方案1:使用此技巧克隆对象

var x={};
x、 css={高度:100,宽度:100};
var y=JSON.parse(JSON.stringify(x));
y、 css.height=200;
console.log('Y Height:',Y.css.Height);

console.log('X Height:',X.css.Height)
Javascript赋值是通过引用完成的,因此当您修改
y.css
时,
x.css
也会被修改。您可以使用指定
y.css

var x={};
x、 css={高度:100,宽度:100};
变量y={};
y、 css=Object.assign({},x.css);
y、 css.height=200;

console.log(x.css.height)
Javascript赋值是通过引用完成的,因此当您修改
y.css
时,
x.css
也会被修改。您可以使用指定
y.css

var x={};
x、 css={高度:100,宽度:100};
变量y={};
y、 css=Object.assign({},x.css);
y、 css.height=200;
console.log(x.css.height)