You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.
拷贝方法的分类
深拷贝:开辟新的内存存储数据。
浅拷贝:没有开辟新的内存存储数据,仅仅复制指向数据的指针。
常用拷贝方法
Object.assign(目标对象,要拷贝的对象)。
注:当要拷贝的对象属性中存在引用(即对象的某个属性值是对象)时,仅仅复制引用(指针),此时针对此引用是浅拷贝,而不是深拷贝。
拓展运算符
与
Object.assign(obj0,obj1, obj2)
相同,后面的对象属性会覆盖前面的对象同名属性。注:一般情况下不能直接使用
for..of
来遍历对象,除非部署 Iterator 接口。最佳实践是与 Object.keys() 搭配使用。与
for...of
的类似循环for...in
循环可用于遍历对象的键名,但是它也会枚举原型链上的属性,Object.keys
只枚举对象本身的属性JSON.parse(JSON.stringify(要拷贝的对象))——最简单的方法,但无法复制函数属性,会破坏原型链
jQuery.extend(是否深拷贝,要拷贝的对象)
其中,特别注意的是 1,2 都是对对象的浅复制,即在被复制的对象中有指向另外的对象的指针,那么将只会复制该指针!!
拓展:属性键名的遍历方法
ES6 一共有 5 种方法可以遍历对象的属性。
for...in
for...in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。
Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。
Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。
Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。
参考
ECMAScript 6入门
The text was updated successfully, but these errors were encountered: