gpt4 book ai didi

javascript变量赋值核心

转载 作者:行者123 更新时间:2023-11-29 16:16:33 25 4
gpt4 key购买 nike

假设我有这个

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"}; 时,您正在将一个 对象分配给 xz 仍然指向原始 对象。

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

关于javascript变量赋值核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com