说明:题目来自于网络搜集查找,自己仅作收集归纳整理,谢谢
描述:写出执行结果,并解释为什么
let a = {n:1};
let b = a;
a.x = a = {n:2};
console.log(a.x);
console.log(b.x)
答案:
undefined
{n:2}
知识点:
- 点的优先级大于等号的优先级
- 对象以指针的形势进行存储,每个新对象都是一份新的存储地址
解析:
- let b = a ; b 和 a 都指向同一个地址
- . 的优先级高于 = 。所以先执行 a.x ,于是现在的 a 和 b 都是 { n : 2 , x : undefined }
- = 从右向左执行。所以是执行 a = { n : 2 },于是 a 指向了 { n : 2 } 不再是之前的地址
- 再执行 a.x = a。这里注意,a.x 是最开始执行的(可以看作是一个整体),已经是 { n : 1 , x : undefined } 而不是一开始的那个 a ,而且 b 和旧的 a 是指向同一个地址的,相当于b.x = a 。所以 b 也就变了
- 但是,= 右边的 a 是已经指向了新地址的 a 。
- 所以,a.x = a 可以看成是 { n : 1, x : undefined }.x = { n : 2 }
最终得出:
a = {n:2}
b = {
n:1,
x:{n:2}
}
图解:

探讨JavaScript中对象引用的特性,通过实例演示对象属性赋值过程中的引用变化及执行结果,深入理解变量、对象与属性之间的关系。
1008

被折叠的 条评论
为什么被折叠?



