Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象属性的引用行为_Javascript - Fatal编程技术网

Javascript 对象属性的引用行为

Javascript 对象属性的引用行为,javascript,Javascript,下面没有复制相同的行为 var myObject = new Object(); var myObjectCopy = myObject; myObject.Name = 'alav'; // logs Name alav on both variable console.log(myObject, myObjectCopy); myObject = null; // logs myObject as null and myObjectCopy still has name 'alav'

下面没有复制相同的行为

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

myObject.Name = 'alav';

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

myObject = null;

// logs myObject as null and myObjectCopy still has name 'alav' -> bcoz of reference copy
console.log(myObject, myObjectCopy);
为什么上述引用复制行为不适用于对象的内部属性(此处为属性)


objA.property=pointer1.property;->不是引用副本吗?

在第一种情况下,您将引用设置为null,因此实际对象没有变化

var objA = {property: 'value'};
var pointer1 = objA;

// update the objA.property, and all references (pointer1 & pointer2) are updated
objA.property = pointer1.property;
objA.property= null;
// logs 'null null' because objA, pointer1 all reference the same object
console.log(objA.property, pointer1.property);
在第二种情况下,您正在对对象进行更改(更改对象的状态) 通过将属性设置为null

myObject = null;// setting reference to null object , but no change in actual object 
因此,在每个引用中,属性的值都将为null


您意识到
var myObjectCopy=myObject
并没有真正复制任何东西,它只是对完全相同对象的两个引用?在回答中,没有“json对象”这样的东西,json是一种带有双引号的键和值的数据格式,常规javascript对象决不是json。@adeneo确切地说,json对象存在,它是本机JS对象,具有
stringify()
parse()
方法;)@Teemu你应该从文档的链接开始,而不是不清楚的文字描述。而且它不是精确的,而是迂腐的,与上下文无关。很明显,OP并不是在谈论
JSON
对象,它是Javascript中JSON解析函数的名称空间,所以为什么要用头发分割来破坏事情呢?我不理解你的问题。您是否在问为什么这两个代码段显示不同的输出?因为你做了不同的事情!或者你真正的问题是什么?但我一点也不相信:(你是如何准备这个图表的?使用visio?试着分别使用object/JSON运行这两个示例。它们的行为完全相同!现在的区别是这是两段不同的代码,而不是参考问题。谢谢david让我这么做
objA.property = null;