javascript变量分配核心
假设我有这个javascript变量分配核心,javascript,Javascript,假设我有这个 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
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
我真的不知道这是怎么回事。有人能详细解释一下吗?你最初的假设是错误的
z
是指向与x
相同对象的指针
var x = {};
var z = x;
alert( z === x ); // true
当你做x={name:“Maizere”}代码>您正在将一个新对象指定给x
z
仍指向原始对象
在后一个示例中,您不是创建新对象,而是更改原始对象的属性
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
var x={name:“Maizere”};
变量y={name:“Zaimere”};
x={年龄:20};
y、 年龄=30岁;
console.log(x);//{age:20}在这两个陈述之后:
x={};
y=x;
内部表示如下所示:
+---- x
|
{} <--+
|
+---- y
更新:
+---- x
|
{name: 'maizere'} <--+
|
+---- y
代表:
{name: 'Maizere'} <------- x
{name: 'maizere'} <------- y
{name:'Maizere'}警报(z.name)->未定义。。。你漏掉了什么。我的没有定义。请向我们展示您的确切代码,并正确使用注释。@Bergi不,您犯了一些错误,您得到了“Maizere”。请检查您测试的代码,但如果我执行x={name:“Maizere”},该怎么办;当z值被设置为创建一个新对象并改变x
指向它之后,它对z
@MaizerePathak没有任何影响。我已经用我认为你在注释中的意思更新了答案,让我知道这是否有意义。根据u,如果x={}和z={}x==z//true,那么如果x.name=“maizere”将有属性“name”不。对象是相等的,但不是同一个对象。如果你改变其中一个,它们就不再平等了。(就像你有x=1;z=1;x==z//true
但是如果你改变z=2
那么x!=z
)
+---- x
|
{name: 'maizere'} <--+
|
+---- y
x = { name: "Maizere" }
{name: 'Maizere'} <------- x
{name: 'maizere'} <------- y