我原本认为对象会作为引用传递。但当我删除 b
后,它仍然存在于 c
中。请看这个例子:
第一部分对我来说很有意义,因为它是按引用传递的:
var a = {b: {val:true}};
a.c = a.b;
a.b.val = 'rawr';
console.log(uneval(a)); // outputs: "({b:{val:"rawr"}, c:{val:"rawr"}})"
现在这部分内容对我来说没有意义:
var a = {b: {val:true}};
a.c = a.b;
a.b.val = 'rawr';
delete a.b;
console.log(uneval(a)); // outputs: "({c:{val:"rawr"}})"
所以b
属性被删除了,但是c
属性仍然保存了在删除之前引用的属性。这是 JavaScript 中的一个 bug 吗?
编辑: 感谢所有的回复!所以这不是一个 bug,在实际应用中这种行为非常好,它允许人们更改“键”/“属性”名称,同时保留对象本身! :)
console.log(a)
而不是console.log(uneval(a))
,因为它将显示属性和其他有用的调试信息(firebug 和 chrome console)。 - soktinpkconsole.log
,你们是对的,但我只是为了在这个例子中显示输出而使用了 uneval。感谢你们提供的传值注意事项。 - Noitidart