JavaScript中的引用平等行为

JavaScript中的引用平等行为,javascript,Javascript,当两者引用相等时,为什么myObjectCopy不会变为null 因为您正在将myObject设置为referencenullmyObjectCopy仍将引用您创建的对象。例如: var myObject = new Object(); var myObjectCopy = myObject; myObject.Name = 'alav'; // logs Name alav on both variable console.log(myObject, myObjectCopy); myO

当两者引用相等时,为什么myObjectCopy不会变为null

因为您正在将
myObject
设置为reference
null
<代码>myObjectCopy仍将引用您创建的对象。例如:

var myObject = new Object();
var myObjectCopy = myObject;

myObject.Name = 'alav';

// logs Name alav on both variable
console.log(myObject, myObjectCopy);

myObject = null;

// logs only myObject as null and myObjectCopy still has name 'alav'
console.log(myObject, myObjectCopy);
以下是一个可视化:

作业前

var a = [0], b = a;
a = [3];
alert(b); //still 0, only a's reference has been changed

old-->{object}因为您正在将
myObject
设置为reference
null
<代码>myObjectCopy
仍将引用您创建的对象。例如:

var myObject = new Object();
var myObjectCopy = myObject;

myObject.Name = 'alav';

// logs Name alav on both variable
console.log(myObject, myObjectCopy);

myObject = null;

// logs only myObject as null and myObjectCopy still has name 'alav'
console.log(myObject, myObjectCopy);
以下是一个可视化:

作业前

var a = [0], b = a;
a = [3];
alert(b); //still 0, only a's reference has been changed

old-->{object}将变量(或对象属性)设置为不同的值只会影响该变量,而不会影响以前引用的对象。可以将其视为设置指向不同地址的指针。

将变量(或对象属性)设置为不同的值只会影响该变量,而不会影响以前引用的对象。将其视为设置指向不同地址的指针。

因为将
myObject
设置为
null
不会更改
myObjectCopy
变量的值。因为将
myObject
设置为
null
不会更改
myObjectCopy
变量的值。作为一名c#程序员,这是我无法理解的。@Al.Net好的,所以在赋值之前,在C#中有
old->{…}null,copy->{…}
,只有当我按值传递copy时才会发生这种行为。所以我想知道thos@Al.NetJavaScript不是C#。C#中的@Al.Net是相同的规则。。。当您创建
myObjectCopy
并分配
myObject
时,实际上您只需创建
的新副本“RValue”
或引用并将其分配给
myObjectCopy
,而当您将
myObject
分配给null时,您只需为
myObject
创建新的值。。。有关作为c#程序员的更多信息,这是我无法理解的。@Al.Net好的,因此在分配之前,您在c#中有
old->{}null,copy->{…}
在c#中,只有当我传递“按值复制”时,才会发生这种行为。所以我想知道thos@Al.NetJavaScript不是C#。C#中的@Al.Net是相同的规则。。。当您创建
myObjectCopy
并分配
myObject
时,实际上您只需创建
的新副本“RValue”
或引用并将其分配给
myObjectCopy
,而当您将
myObject
分配给null时,您只需为
myObject
创建新的值。。。关于更多信息,我不熟悉C#,但我觉得你可以用C指针做类似的事情。您还可以将变量视为文件系统符号链接(或快捷方式)。设置新值只会将链接重定向到其他文件。而且你没有访问“地点”的权限。您不能删除对象或更改其类型。我不熟悉C#,但我觉得您可以使用C指针执行类似的操作。您还可以将变量视为文件系统符号链接(或快捷方式)。设置新值只会将链接重定向到其他文件。而且你没有访问“地点”的权限。不能删除对象或更改其类型。