需要了解javascript delete是如何工作的

需要了解javascript delete是如何工作的,javascript,Javascript,我认为delete将从特定对象中删除object属性。在下面的示例中,我将d对象指定给c,并从c对象中删除属性。但是c和d的财产都被拿走了 var d = {a:1,b:2,c:3}; var c = d; delete c.c; console.log(d); 返回对象{a=1,b=2} 代码中只有一个对象。在Javascript中,对象是通过引用分配的,因此当您编写c=d时,c和d都引用完全相同的对象。在修改特性而不是删除特性时,这一点可能更为明显: var d = {a:1,b:2,c:

我认为delete将从特定对象中删除object属性。在下面的示例中,我将d对象指定给c,并从c对象中删除属性。但是c和d的财产都被拿走了

var d = {a:1,b:2,c:3};
var c = d;
delete c.c;
console.log(d);

返回对象{a=1,b=2}

代码中只有一个对象。在Javascript中,对象是通过引用分配的,因此当您编写
c=d
时,
c
d
都引用完全相同的对象。在修改特性而不是删除特性时,这一点可能更为明显:

var d = {a:1,b:2,c:3};
var c = d;
c.c = 0;
console.log(d); Object {a: 1, b: 2, c: 0} 

如果需要对象的副本,则需要创建一个相同的新对象。这里有很多很好的答案:

var c=d
之后,c和d指向同一组内存,因此对其中一个进行更改将影响另一个。如果你想复制一个对象的值,你必须复制它。

“有很多好的答案”-然后投票关闭而不是回答(顺便说一句,upvote不是我的)@JanDvorak这些好答案没有回答OP的问题,他们正在回答如何用Javascript复制一个对象。我相信,对于最初的问题,已经有很多很好的答案了,不是吗?我认为这也应该结束,但核心问题实际上与参数传递无关。这里绝对没有函数调用。@Pointy你能找到更好的引用吗?@JanDvorak我也能搜索,但这很痛苦。问题是,关于这个主题的大多数问题都是由完全没有编程经验的人提出的,或者是对语言的本质感到非常困惑的人提出的。因此,问题标题往往是绝对可怕的。(编辑:今晚我经常使用“绝对”这个词:)@Pointy这是不是意味着你不打算投票结束?@JanDvorak给我一点时间做一些搜索:)我相信结束提问,但我认为把一个问题作为一个无关问题的重复来结束是错误的。