Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.assign{}和Object.assign[]有区别吗_Javascript_Typescript - Fatal编程技术网

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

Javascript Object.assign{}和Object.assign[]有区别吗,javascript,typescript,Javascript,Typescript,我正在浏览一位不知名开发人员的一些旧代码,注意到他有时使用 Object.assign({}, xyz) 还有其他他用过的 Object.assign([], abc); 两者之间有区别吗?是的,有区别。一个将值指定给新对象,另一个将值指定给新数组 查看此处的输出,并与实际浏览器控制台中的输出进行比较 var abc={foo:bar}; var r1=Object.assign({},abc); var r2=对象分配([],abc); 控制台日志(r1); 控制台日志(r2)对象。

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

Object.assign({}, xyz) 
还有其他他用过的

 Object.assign([], abc);

两者之间有区别吗?

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

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

var abc={foo:bar};
var r1=Object.assign({},abc);
var r2=对象分配([],abc);
控制台日志(r1);

控制台日志(r2)
对象。assign
是一个函数,它将可枚举的自身属性从一个对象复制到另一个对象(称为target)并返回目标对象。由于数组也是对象,所以您也可以将属性复制到它们,但是,它们不会在迭代期间显示

以以下代码段为例:

  • obj
    是一个
    对象
  • arr
    是一个
    对象
    ,但也是一个
    数组
  • arr.a
    为1
  • arr.forEach
    不打印
    a
const obj=Object.assign({}{
答:1,,
0: 2
});
const arr=Object.assign([]{
答:1,,
0: 2
});
控制台日志(obj类型);
控制台日志(arr类型);
console.log(Array.isArray(arr));
控制台日志(obj);
控制台日志(arr);
console.log(Object.keys(arr));
控制台日志(arr.a);
arr.forEach((item,idx)=>console.log(`${idx}:${item}`));
//测试评论中的问题
设copiedObj={a:123};
让copy=Object.assign({},copiedObj);
控制台日志(副本);
copiedObj=[];
console.log(copiedObj);

控制台日志(副本)那么是什么导致复制的对象发生更改?假设我像您一样分配obj。然后我将a:1改为a:435和0:bbb。为什么我发现我的obj也改变了?难道不应该是一个副本吗?我不太明白你的意思,如果你做
obj.a=435
你可以期望它会改变。是的,出于某种原因,如果我复制对象,例如:const obj=object.assign({},abc);然后在下一行我做abc=[];那么obj也将=[];由于某种原因,复制的对象仍然链接到我的原始对象,即使它应该是它的副本。@CodeMan03我在代码段中添加了你的示例,我无法复制。我想我需要克隆deep。我在一个对象中有一个对象,嵌入的对象正在更改。我也不能使用Json.parse(Json.stringify(object))作为保存javascript日期所需的嵌入对象。所以我安装了lodash cloneDeep