javascript – 为什么我的对象引用不为null?

我无法解释以下行为:

var persona = {nome:"Mario", indirizzo:{citta:"Venezia"}}
var riferimento = persona.indirizzo;
// riferimento ==> {citta: "Venezia"} <-- It is Ok

persona.indirizzo.citta = "Torino";
// riferimento ==> {citta: "Torino"} <-- It is Ok

persona.indirizzo = null;
// riferimento ==> {citta: "Torino"} <-- Why?

persona.indirizzo = undefined;
// riferimento ==> {citta: "Torino"} <-- Why?

我已经在C#和JavaScript上测试了这个,我也有同样的行为.

为什么我的变量riferimento不为null或未定义?

最佳答案 因为这是一个参考.它不是实际的对象,它只是一种指向对象所在内存中位置的“指针”.考虑这两个陈述:

>您可以根据需要为同一对象提供尽可能多的引用.
>设置引用的值时,只是更改引用而不是对象本身.

所以当你这样做时:

persona.indirizzo = null;

你没有修改indirizzo指向的对象.你只是把indirizzo指向其他东西.在这种情况下,null.该对象在内存中仍保持不变.而riferimento仍然指向那个对象. (旁注:如果没有任何东西指向该对象,那么它将超出范围,系统将根据需要“清理”该内存.不同的语言/环境/等以不同的方式处理它.)

它很微妙,但在这两个陈述中可以看出差异:

persona.indirizzo.citta = "Torino";
persona.indirizzo = null;

第一行跟随引用,并将对象中某些内容的值设置为新值.第二行将引用本身更改为不再指向对象.

点赞