JS基础之对象

140 阅读1分钟

对象的计算属性

image.png 下面的看得更清楚 image.png

for in 循环

遍历一个对象的所有键(key) image.png 其他操作 image.png

浅拷贝

复制一个对象,其实只是复制了该对象的引用,真正的对象存在内存地址上。所以这两个变量其实都指向同一块内存地址,这样会导致一个结果。更改其中一个,另一个也会跟着变。

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

image.png

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)