美文网首页
Object.assign()

Object.assign()

作者: 楼下的黑猫不太冷 | 来源:发表于2018-03-01 19:06 被阅读0次

    参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

    Oject.assign()方法将源对象上的属性拷贝到目标对象,最后返回目标对象。
    语法

    Object.assign(target, ...sources);
    

    特点: 浅拷贝,只是数据的引用(浅拷贝拷贝的是栈空间内存地址,并不是拷贝的内容)

    function test() {
      'use strict';
    
      let obj1 = { a: 0 , b: { c: 0}};
      let obj2 = Object.assign({}, obj1);
      console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
      
      obj1.a = 1;
      console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
      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}}
      
      // Deep Clone
      obj1 = { a: 0 , b: { c: 0}};
      let obj3 = JSON.parse(JSON.stringify(obj1));
      obj1.a = 4;
      obj1.b.c = 4;
      console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
    }
    
    test();
    

    对于相同属性的数据,后面的数据会覆盖前面的数据,比如数组,对象

    // 对象
    var o1 = { a: 1, b: 1, c: 1 };
    var o2 = { b: 2, c: 2 };
    var o3 = { c: 3 };
    
    var obj = Object.assign({}, o1, o2, o3);
    console.log(obj); // { a: 1, b: 2, c: 3 } ,b改变为2,c改变为3
    
    // 数组
    var arr1 = [1, 2, 3];
    var arr2 = [4, 5, 6];
    
    var arr= Object.assign({}, arr1, arr2);
    console.log(arr); // { '0': 4, '1': 5, '2': 6 } 会隐式转化为对象
    

    相关文章

      网友评论

          本文标题:Object.assign()

          本文链接:https://www.haomeiwen.com/subject/aowgxftx.html