对象的计算属性
下面的看得更清楚
for in 循环
遍历一个对象的所有键(key)
其他操作
浅拷贝
复制一个对象,其实只是复制了该对象的引用,真正的对象存在内存地址上。所以这两个变量其实都指向同一块内存地址,这样会导致一个结果。更改其中一个,另一个也会跟着变。
let user = { name: "John", age: 30 };
let user2 = user
console.log(user2) //{ name: "John", age: 30 };
user2.name = 'xiaoming'
console.log(user) // { name: "xiaoming", age: 30 };
实际工作中有时候会碰到需要拷贝的两个互不影响的对象,那怎么办呢?
1、将对象属性遍历出来,放到另一对象里
let user = { name: "John", age: 30 };
let clone = {};
// 将 user 中所有的属性拷贝到其中
for (let key in user) {
clone[key] = user[key];
}
clone.name = "Pete";
alert( clone ) // { name: "Pete", age: 30 };
alert( user ); // { name: "John", age: 30 };
2、对象合并 Object.assign
let user = { name: "John" };
let p1 = { aaa: true };
let p2 = { bbb: true };
Object.assign(user, p1, p2); //返回新user
console.log(user) //{ name: "John", aaa: true, bbb: true }
深拷贝
如果对象里面还有对象呢,类似于:
let user = { name: "John", sizes: { height: 182, width: 50 } };
只是简单复制最外面的那层肯定是不会够了,那就要对每个对象进行遍历了,检查每个 user[key] 的值的克隆循环,如果值是一个对象,那么也要复制它的结构。这就叫“深拷贝”。
可以用递归来实现。或者不自己造轮子,使用现成,例如 JavaScript 库 lodash 中的 _.cloneDeep(obj)。