JavaScript的浅拷贝与深拷贝
相信大多数人在vue
中都遇到过一个问题,就是对象变量a
赋值给一个新的变量b
,在修改b
属性时 a
也被修改了
这个准确的说不是vue
的特点, 而是js
的,估计是为了性能和效率优化,当对象变量赋值时,传递的是引用
,相当于两个变量指向共同一个内存地址;
1 |
|
所以导致了, 上述问题的发生; 然而在js的5个基础类型
中并不会使用引用赋值
, 而且解决办法就是用深浅拷贝
浅拷贝
1 |
|
如果我没记错的话, 好像是es6
的特性, 浏览器要考虑ie和老旧浏览器解释引擎的问题; nodejs
typescript
之类的不用考虑, 他们会经过一个编译的工序使其兼容较早的es
规范
使用示例
1 |
|
注意:叫浅拷贝
是有原因的, 它只能让一维属性不采用引用方式
,如果你的对象中包涵对象、数组
请使用深拷贝
深拷贝
1 |
|
把对象变量转换成字符串, 再解析给另一个变量。 完全重新解析的, 自己申请开辟内存空间,就是感觉上不怎么优雅;
1 |
|
JavaScript的浅拷贝与深拷贝
http://edk24.com/2020/58b9a018.html