Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.assign方法将更改原始对象属性-JS_Javascript_Reactjs - Fatal编程技术网

Javascript Object.assign方法将更改原始对象属性-JS

Javascript Object.assign方法将更改原始对象属性-JS,javascript,reactjs,Javascript,Reactjs,我是ReactJS新手,我发现了一件关于Object.assign()的奇怪事情: const B={ k1:‘b’, k2:‘bb’, 特雷达:[{ 儿童:['g'] }] } var A=Object.assign({},B); A.treedata[0]。子对象=[1]; console.log(B)您需要解析和strigify对象,然后使用对象。分配, 像这样var A=Object.assign({},JSON.parse(JSON.stringify(B)),以便原始对象不会更改

我是ReactJS新手,我发现了一件关于
Object.assign()的奇怪事情:

const B={
k1:‘b’,
k2:‘bb’,
特雷达:[{
儿童:['g']
}]
}
var A=Object.assign({},B);
A.treedata[0]。子对象=[1];

console.log(B)
您需要解析和strigify对象,然后使用
对象。分配,
像这样
var A=Object.assign({},JSON.parse(JSON.stringify(B)),以便原始对象不会更改

查看代码片段

const B={
k1:‘b’,
k2:‘bb’,
treedata:[{title:'title',key:-1,fieldName:'',from:-1,to:-1,children:['g']}]
}
var A=Object.assign({},JSON.parse(JSON.stringify(B));
A.treedata[0]。子对象=[1];

警报(B.treedata[0]。儿童)您需要解析和strigify对象,然后使用
对象。分配,
像这样
var A=Object.assign({},JSON.parse(JSON.stringify(B)),以便原始对象不会更改

查看代码片段

const B={
k1:‘b’,
k2:‘bb’,
treedata:[{title:'title',key:-1,fieldName:'',from:-1,to:-1,children:['g']}]
}
var A=Object.assign({},JSON.parse(JSON.stringify(B));
A.treedata[0]。子对象=[1];


警报(B.treedata[0]。儿童)与ReactJS无关,这是JavaScript的工作方式(以及Ruby和Python…)。我明白了,我正在进行react实践,很抱歉标记。
Object.assign
仅将属性复制到新对象中。如果一个属性是对另一个对象的引用,比如在你的例子中
treedata
is,那么
object.assign
复制一个引用,因此对象a和B指向同一个
treedata
。你也可以在这里阅读以明确对象。assign()这个问题的解释和答案在这里提到:-在标题下“深度克隆警告”与ReactJS无关,JavaScript就是这样工作的(还有Ruby和Python…)。我明白了,我正在做一个react练习,为标记感到抱歉。
Object.assign
只将属性复制到一个新对象中。如果一个属性是对另一个对象的引用,就像您的例子中的
treedata
is,那么
对象。assign
复制一个引用,因此对象a和B指向相同的
treedata
。您可以在这里阅读因此,为了明确Object.assign()这个问题的解释和答案,这里提到:-在标题“深度克隆警告”下,谢谢Aravind!这非常有帮助。@charleschen随时准备提供帮助“需要解析和字符串化”-不,你只需要深度复制。“解析和字符串化”是一种方法(考虑到它的局限性,这不是最好的)。请参考。@Amadan您能描述一下深度复制吗?我真的想知道简单的解决方案。没有简单的解决方案,因为JavaScript中没有本机深度复制。JSON路由的问题是它不能复制循环结构,也不能复制任何非JSON基元的内容。我已经将规范堆栈溢出链接到w线程处理JavaScript中的深度复制。(另请参阅以了解问题。)感谢Aravind!这非常有帮助。@charleschen随时准备提供帮助“需要解析和字符串化”-不,您只需要进行深度复制。“解析和字符串化”是一种方法(鉴于其局限性,不是最好的方法)。请参考。@Amadan您能描述一下深度复制吗?我真的想知道简单的解决方案。没有简单的解决方案,因为JavaScript中没有本机深度复制。JSON路由的问题是它不能复制循环结构,也不能复制任何非JSON基元的内容。我已经将规范堆栈溢出链接到在JavaScript中处理深度复制的w线程(另请参阅以了解问题)