1、a = { n: 1},a.x = a = { n: 2 }

var a = {
    
     n: 1};  
// 干了什么,开辟了一个空间生成了一个对象, a是生成对象的索引
// 这个a可以叫为prevA的索引{n:1}

console.log(a)  //{ n: 1 }

// a.x是一个表达式计算,获取a.x的计算结果,缓存,等待后面的计算
a.x = a = {
    
     n: 2 } // 这个a可以叫做nextA的索引,存的值是{n: 2}

console.log(a.x)  // undefined   a.x 去获取{n: 2}上的不存在属性可不就是等于undefined
console.log(a) // { n: 2 }

理解:
a.x是一个表达式计算,获取a.x的计算结果,缓存,等待着后面的计算

后面计算完之后其实事对前面的a进行了重新赋值
验证:

var a = {
    
     n: 1, x:9}; 
console.log(a)  // { n: 1, x: 9 }

a.x = a = {
    
     n: 2 } 

console.log(a.x)  // undefined  
console.log(a) // { n: 2 }
var a = {
    
     n: 1, x:9};  

console.log(a)  //{ n: 1 }
let b ={
    
     };

b.x = a = {
    
     n: 2 } 

console.log(a.x)  // undefined 
console.log(a) // { n: 2 }
console.log(b) // { x: { n: 2 } }

猜你喜欢

转载自blog.csdn.net/weixin_43131046/article/details/126790981