【发布时间】:2021-07-31 20:21:22
【问题描述】:
请给我解释一下这个现象。
this.testObject = { a: 1, b: { a: 3, b: { a: 78, b: null } } };
let g = this.testObject;
while (g.b) {
g = g.b;
}
g.b = {
a: 79,
b: null
};
console.log(this.testObject); // { a: 1, b: { a: 3, b: { a: 78, b: { a: 79, b: null } } } }
现在我决定坚持使用this.testObject 并删除g:
this.testObject = { a: 1, b: { a: 3, b: { a: 78, b: null } } };
while (this.testObject.b) {
this.testObject = this.testObject.b;
}
this.testObject.b = {
a: 79,
b: null
};
console.log(this.testObject); // {a": 78,b": {a": 79,b": null}
发生了什么事?我分配的g 是如何影响这个对象的?
在第一个 sn-p 中,如果我做了 g=g.b,那么我基本上是在为 g 分配一个新值。但是,如果我明确地这样做,那么结果就不一样了?
this.testObject = {a:1, b:{a:3,b:{a:78, b:null}}};
let g = this.testObject;
while(g.b){
g = {a:7777, b:null};
}
g.b={a:79, b:null};
this.testObject; // {a": 1,b": {a": 3,b": {a": 78,b": null}
【问题讨论】:
-
??您的循环明显更改
this.testObject为一系列新值。没有任何东西可以将其恢复到原来的值。 -
预期的行为是什么?
-
g和this.testObject是两个独立的可修改的东西(g是一个变量,this.testObject是一个对象属性)。更改g不会更改this.testObject的值。 -
@TrickOrTreat
g是不是副本。这只是一个参考。重新分配g不会影响之前分配的引用。
标签: javascript linked-list javascript-objects