var a = { n: 1 }; var b = a; a.x = a = { n: 2 };JavaScript中运算符优先级----坑坑坑

JavaScript中运算符优先级----坑坑坑
在这里插入图片描述
**加粗样式
**

作用域面试六

var a = { n: 1 };
var b = a;
a.x = a = { n: 2 };
console.log(a.x);
console.log(b);
// 结果
// undefined
// { n: 1, x: { n: 2 } }
// 原理
// 第一行  a = { n: 1 }; 给变量a 赋值一个引用对象{ n: 1 };
// 第二行 b = a; 将a的引用地址赋值给 b  b={ n: 1 };
// 第三行 a.x = a = { n: 2 }; 拆解 之后 a = { n: 2 } a重写了引用地址 而 a.x = { n: 2 };相当于在a变量中添加一个属性x 并给x属性赋值为{ n: 2 };
// 第四行 a.x因为 a重写了引用地址  里面a没有属性x所以为undefined
// 第五行 由于第二行b = a;a和b同一个地址然后又在a中添加一个属性x 并给x属性赋值为{ n: 2 } 所以b的值为// { n: 1, x: { n: 2 } }

// 注意点 对a.x=a={n:1},赋值语句一般都是从右向左赋值,但是这里涉及到了赋值运算符优先级的问题,我们再看一下js中的运算符的优先级
// 我们可以看到“.”的优先级是要大于“=”的,因此先执行a.x,这是属性赋值(不了解的小伙伴可以先去看一下js的属性),在内存中是这样的,因为x声明未定义,所以是undefined。 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值