Object.assign {}和Object.Assign []有区别吗?

时间:2018-05-31 14:24:29

标签: javascript typescript

我正在浏览一个已经不存在的开发人员的旧代码,并注意到有时他使用了

Object.assign({}, xyz) 

和他用过的其他人

 Object.assign([], abc);

两者之间有区别吗?

2 个答案:

答案 0 :(得分:3)

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

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



var abc = {foo:"bar"};

var r1 = Object.assign({},abc);
var r2 = Object.assign([],abc);

console.log(r1);
console.log(r2);




第二个没有做的是向数组中添加一个新项目 - 它的长度仍为0.

答案 1 :(得分:0)

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

以下面的代码段为例:

  • objobject
  • arrobject,也是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);