代码之家  ›  专栏  ›  技术社区  ›  CodeMan03

object.assign{}和object.assign[]有区别吗

  •  1
  • CodeMan03  · 技术社区  · 7 年前

    我正在浏览一个不工作的开发人员的一些旧代码,注意到有时他使用

    Object.assign({}, xyz) 
    

    还有其他他用过的

     Object.assign([], abc);
    

    两者有区别吗?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Jamiec    7 年前

    是的,有区别。一个将值分配给新对象,另一个将值分配给新数组。

    查看此处的输出并与实际浏览器控制台中的输出进行比较。

    var abc = {foo:"bar"};
    
    var r1 = Object.assign({},abc);
    var r2 = Object.assign([],abc);
    
    console.log(r1);
    console.log(r2);

    什么第二个 要做的是向数组中添加一个新项-它的长度仍然为0。

        2
  •  0
  •   J. Pichardo    7 年前

    Object.assign 是一个复制 可枚举的 拥有 从一个对象到另一个对象(称为目标)的属性,并返回目标对象。由于数组也是对象,因此也可以将属性复制到它们,但是,它们在迭代期间不会出现。

    以下面的代码片段为例:

    • obj 是一个 object
    • arr 是一个 对象 ,但同时也是 array
    • arr.a 是1
    • arr.forEach 不打印 a

    const obj = Object.assign({}, {
      a: 1,
      0: 2
    });
    const arr = Object.assign([], {
      a: 1,
      0: 2
    });
    
    console.log(typeof obj);
    console.log(typeof arr);
    
    console.log(Array.isArray(arr));
    
    console.log(obj);
    
    console.log(arr);
    console.log(Object.keys(arr));
    console.log(arr.a);
    
    arr.forEach((item, idx) => console.log(`${idx}: ${item}`));
    
    // To test the question in the comments
    
    let copiedObj = { a: 123 };
    
    let copy = Object.assign({}, copiedObj);
    
    console.log(copy);
    
    copiedObj = [];
    
    console.log(copiedObj);
    console.log(copy);
    推荐文章