如题比如
<script type="text/javascript">
a={
q:1,
w:2,
e:3
}
b = a
a.q='q'
console.log(b.q)
</script>
如何让控制台输出的对象也是(我的意思是让赋值的时候不是修改b所指向的地址,而是将b的值赋给a)
{
q:3,
w:4,
e:5,
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
JavaScript的变量分成引用类型和基本类型。对象是引用类型的值,所以对对象的操作实际是操作对象的引用而不是操作实际的对象。所以b = a其实另b指向了a同一份内存空间,因此a.q其实也改变了b的q,输出的应该是‘q’.
写了个函数,看看还不是你想要的:
DeepClone 是传统的做法,现在兴起的做法可以留意一下 Facebook 的 immutable.js,也有不少类似的。
有个笨办法是
更靠谱的是
_.clone和_.cloneDeep提问有一句怎么没看懂,“我的意思是让赋值的时候不是修改b所指向的地址,而是将b的值赋给a”,难道不是要把a的值赋给b吗?
百度一下深拷贝吧~~,感觉题主问的是这个