假设我有这个
var x={}; //x is an address in the memory where object is stored
var z=x; //z=x after execution is equal to z={} right?现在z与x无关,或者在执行后与x无关,
x={name:"Maizere"};
z!=x //true但是,当
x.name="maizere";
alert(z.name)//maizere why?我们没有设置z的值,但是x和z与x的关系不应该再存在
实际代码:
x={};
y=x;
x.name="maizere";
alert(y.name)//maizere我真的不知道这是如何工作的,.Can,有人能详细解释一下吗?
发布于 2013-02-01 01:51:57
您最初的假设是错误的;z是指向与x相同的对象的指针。
var x = {};
var z = x;
alert( z === x ); // true当您执行x = { name: "Maizere" };时,您将为x分配一个新对象。z仍然指向原始对象。
x = { name: "Maizere" };
alert( z !== x ); // true在后一个示例中,您不是在创建新对象,而是在更改原始对象的属性。
var x = {};
var z = x;
x.name = "maizere";
alert( z === x ); // true另一个可能产生混淆的例子是:括号语法创建一个新对象,而不是修改原始对象。
var x = { name: "Maizere" };
var y = { name: "Zaimere" };
x = { age: 20 };
y.age = 30;
console.log( x ); // {age: 20} <-- original object is replaced
console.log( y ); // {name: "Zaimere", age: 30} <-- original object is modified发布于 2013-02-01 01:53:00
在这两个语句之后:
x={};
y=x;内部表示如下所示:
+---- x
|
{} <--+
|
+---- y因此,对x的任何更改都会反映在y中
x.name="maizere";
alert(y.name)//maizere更新:
+---- x
|
{name: 'maizere'} <--+
|
+---- y一旦你将两个变量中的一个赋值给其他变量,这个问题就消失了:
x = { name: "Maizere" }表示:
{name: 'Maizere'} <------- x
{name: 'maizere'} <------- yhttps://stackoverflow.com/questions/14631876
复制相似问题