We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript 数据类型分为两种:
浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化。Array.prototype.slice/concat , Object.assign 扩展运算符... 都是浅拷贝
Array.prototype.slice/concat
Object.assign
...
var obj = { a: 1, b: { foo: 'foo' } }; var newObj = {...obj}; // 或 var newObj = Object.assign({}, obj); newObj.b.foo = 0; console.log(obj); // { a: 1, b: { foo: 0 } };
与之对应的就是深拷贝,深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。
JSON.parse( JSON.stringify(obj) ) 可以简单粗暴的作为深拷贝,但不能拷贝函数
JSON.parse( JSON.stringify(obj) )
自己实现一个深拷贝
var deepCopy = function(obj) { if (typeof obj !== 'object') return; var newObj = obj instanceof Array ? [] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]; } } return newObj; }
一般在开发中会引用第三方工具库,会提供深拷贝方法 如 lodash的_.cloneDeep, jquery的$.extend, immutable的数据转换等
The text was updated successfully, but these errors were encountered:
我们在处理复杂 js 对象的时候,因为对象是引用类型,往往会因为修改了对象而产生副作用———因为不知道谁还引用着这份数据(或子属性数据),不知道这些修改会影响到谁。因此我们经常会把对象做一次深拷贝再放到处理函数中。 如果需要频繁地操作一个复杂对象,每次都完全深拷贝一次的话效率太低了,大部分场景下都只是更新了这个对象一两个字段,其他的字段都不变,对这些不变的字段的拷贝明显是多余的。
这时就出现了持久化数据immutable,在操作对象的时候只 clone 变化的节点和其祖先节点,其他的保持不变。
Sorry, something went wrong.
No branches or pull requests
JavaScript深拷贝浅拷贝
JavaScript 数据类型分为两种:
浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化。
Array.prototype.slice/concat
,Object.assign
扩展运算符...
都是浅拷贝与之对应的就是深拷贝,深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。
JSON.parse( JSON.stringify(obj) )
可以简单粗暴的作为深拷贝,但不能拷贝函数自己实现一个深拷贝
一般在开发中会引用第三方工具库,会提供深拷贝方法 如 lodash的_.cloneDeep, jquery的$.extend, immutable的数据转换等
The text was updated successfully, but these errors were encountered: