我正在浏览一个已经不存在的开发人员的旧代码,并注意到有时他使用了
Object.assign({}, xyz)
和他用过的其他人
Object.assign([], abc);
两者之间有区别吗?
答案 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
是一个将可枚举 拥有属性从一个对象复制到另一个对象(称为目标)并返回目标对象的函数。由于数组也是对象,因此您也可以将属性复制到它们,但是,它们在迭代期间不会显示。
以下面的代码段为例:
obj
是object
arr
是object
,也是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);