let a = { n : 1 }; let b = a; a.x = a = { n: 2 }; // 如果改为这样 // a = a.x = { n: 2 }; // 结果还是一样 // JavaScript 中点(.)比 等号 (=) 的优先级高 console.log(a.x); // undefined // a.x = a = { n: 2 }; // 这段代码可以写成这样子 // a.x = { n: 2 }; // a = { n: 2 }; // 因为 a 是引用类型数据。 // 所以当 a.x = { n: 2 };时引用值的地址改变; // 此时全局的 let a = { n: 1, x: { n: 2 } }; // 接着又执行 a = { n: 2 };时 a 引用地址已经改变。 // 最后输出的结果就是 : undefined console.log(b.x); // { n: 2 } // 经过上面 a 的操作, // 全局的 a 值已经变为 a = { n: 1, x: { n: 2 } }; // 而此时 b 引用的地址一直没有改变 // 所以输出结果为 { n: 2 }
JavaScript 引用类型值值操和运算符优先级比较 -- 笔试
关注
打赏