關於js對象賦值


關於js對象賦值

1.含有相同的鍵進行賦值

如:

a:{name:"",age:""}, // 需要被賦值的對象
b:{name:"xx",age:"20",sex:"男"} // 數據對象
// 將b與a相同的健進行賦值

Object.keys(this.a).forEach((key) => {
    this.a[key] = this.b[key]
})
// 得到
a:{name:"x",age:"20"}, 

2.復制對象(遍歷賦值)

var obj = {  //定義對象
    x : true,
    y : false
}
var obj1 = {};
for (var i in obj) {  //遍歷obj對象,把它的所有成員賦值給對象obj1
    obj1[i] = obj[i];
}

3.復制對象(直接賦值)

直接用=的方式把一個對象賦值給另一個對象,會導致修改新對象時,原對象也發生變化

var obj1 = {'name': '1111'};
var obj2 = obj1;
obj2.name = '2222';
console.log(obj1.name); //'2222'
  • JavaScript 中對象的賦值是默認引用賦值的(兩個對象指向相同的內存地址)

4.Object.assign()拷貝對象 (深拷貝,但沒完全深)

// 使用 Object.assign() 方法復制對象
let obj1 = { a: 0 , b: { c: 0}};
let obj2 = Object.assign({}, obj1);
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}

obj2.a = 2;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}

obj2.b.c = 3;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
  • 可以看到當修改obj2.b.c的值時,原對象obj1.b.c也跟着發生了變化,Object.assign()只是讓對象里第一層的數據沒有了關聯性,但是對象內的對象則跟被復制的對象有着關聯性的。
  • Object.assign(obj) --淺拷貝
    Object.assign({},obj) --只有第一層深拷貝 (ES6中擴展運算符...也是如此

5.JSON.parse(JSON.stringify(obj))

let obj1 = { a: 2, b: { c: 0 } }
let obj2 = JSON.parse(JSON.stringify(obj1))
  • 使用場景限制:obj屬性不能是function、RegExp等,JSON序列化時會造成屬性丟失:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM