Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 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