我正在查看一个已经退役的开发人员的一些旧代码,注意到他有时会使用
Object.assign({}, xyz) 还有其他他用的
Object.assign([], abc);这两者有什么区别吗?
发布于 2018-05-31 14:28:01
是的,是有区别的。一个将值分配给一个新对象,另一个将值分配给一个新数组。
在这里查看输出并与实际浏览器控制台中的输出进行比较。
var abc = {foo:"bar"};
var r1 = Object.assign({},abc);
var r2 = Object.assign([],abc);
console.log(r1);
console.log(r2);
第二个没有做的是向数组中添加一个新项--它的长度仍然是0。
发布于 2018-05-31 14:44:56
Object.assign是一个函数,它将可枚举的自身属性从一个对象复制到另一个对象(称为目标),并返回目标对象。因为数组也是对象,所以您也可以将属性复制到它们,但是,它们在迭代过程中不会出现。
以下面的片段为例:
obj是objectarr是object,但也是arrayarr.a为1arr.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);
https://stackoverflow.com/questions/50626618
复制相似问题