首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript变量赋值核心

javascript变量赋值核心
EN

Stack Overflow用户
提问于 2013-02-01 01:42:44
回答 2查看 102关注 0票数 2

假设我有这个

代码语言: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无关,

代码语言:javascript
复制
x={name:"Maizere"};
z!=x        //true

但是,当

代码语言:javascript
复制
x.name="maizere";
alert(z.name)//maizere why?

我们没有设置z的值,但是x和z与x的关系不应该再存在

实际代码:

代码语言:javascript
复制
 x={};
 y=x;
 x.name="maizere";
 alert(y.name)//maizere

我真的不知道这是如何工作的,.Can,有人能详细解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 01:51:57

您最初的假设是错误的;z是指向与x相同的对象的指针。

代码语言:javascript
复制
var x = {}; 
var z = x;

alert( z === x );    // true

当您执行x = { name: "Maizere" };时,您将为x分配一个新对象。z仍然指向原始对象。

代码语言:javascript
复制
x = { name: "Maizere" };
alert( z !== x );    // true

在后一个示例中,您不是在创建新对象,而是在更改原始对象的属性。

代码语言:javascript
复制
var x = {}; 
var z = x;

x.name = "maizere";
alert( z === x );    // true

另一个可能产生混淆的例子是:括号语法创建一个新对象,而不是修改原始对象。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2013-02-01 01:53:00

在这两个语句之后:

代码语言:javascript
复制
x={};
y=x;

内部表示如下所示:

代码语言:javascript
复制
      +---- x
      |
{} <--+
      |
      +---- y

因此,对x的任何更改都会反映在y

代码语言:javascript
复制
 x.name="maizere";
 alert(y.name)//maizere

更新:

代码语言:javascript
复制
                     +---- x
                     |
{name: 'maizere'} <--+
                     |
                     +---- y

一旦你将两个变量中的一个赋值给其他变量,这个问题就消失了:

代码语言:javascript
复制
x = { name: "Maizere" }

表示:

代码语言:javascript
复制
{name: 'Maizere'} <------- x

{name: 'maizere'} <------- y
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14631876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档