对象引用未定义在JavaScript中

如果你有一个JavaScript对象,它引用另一个对象,然后第二个对象的变化,你可以期望看到引用的对象的变化。 但是,如果第二个对象最初未定义,则第一个对象将永远不会反映新的更改。 任何人都可以解释在这个代码引擎盖下发生了什么?

//Here we see the reference updated var myobj = {}; var pointer = myobj; myobj.value = 1; console.log(pointer.value); //Here if we start as undefined, create a reference and then allocate a new object - not so much var myobj = undefined; var pointer = myobj; myobj = {} myobj.value = 1; console.log(pointer.value); 

这是观察下

 $ node --version v0.8.22 

答案很简单。 您需要了解值和引用typesvariables之间的差异。

在第一个例子中有一个引用typesvariables,即myObj指向内存中的一个区域。 然后你再定义一个variables,即pointer同一区域的pointer 。 这就是为什么对一个对象的任何改变立即反映在另一个对象上。

在第二个例子中,情况稍有不同。 您可以定义未定义types的myObj 。 这意味着这个variables没有指定值。 你会这样做的情况下,你有一个值types的variables,例如数字,string等你没有一个值分配; 这也意味着myObj不指向内存中的堆部分。 那么当你做这个var pointer = myobj; 你只是将一个variables的值复制到另一个variables中; 类似于这样做,例如:var pointer = 5; 这被称为“按值复制”,所以这就是为什么变化没有被反映出来。