一道有意思的赋值题

昨天某人分享给我一道有意思的题,问输出以及原因,网上原因说什么的都有,什么赋值,什么从左到右从右到左的,把我俩绕的是云里雾里的。今天豁然开朗,原因明明就很简单,是想的太复杂钻牛角尖了而已。

案例1
//案例1
var c = {};
var b = {};
c.a = b = {'a':1};
console.log(c.a);//{'a':1}

这个输出大家都能接收,也都能理解。c和b是两个对象,互不相干,所以,给c.a赋值{'a':1},输出c.a就是刚刚赋的值{'a':1}

案例2
//案例2
var d = {};
d = d.a = {'a':1};
console.log(d.a);//1

输出是1!!!知道原因的忽略我接下来说的话。
在js中的运算符是有个优先级的,.的优先级要比=的优先级高。文末附赠一张优先级表。

分析上面案例:

  • .的优先级高,所以先运算.
  • 先给d.a赋值{'a':1},此时d{a:{'a':1}},此时要是输出d.a肯定是{'a':1}。问我怎么在这个时候输出证明一下,我也不会啊;
  • 接着再给d赋值{'a':1},此时d{'a':1},所以输出d.a就是1

问题的关键在于最后输出的时候d是什么,这样是不是就很容易就理解了?

案例3

案例三来证明下我说的是不是对的,嘿嘿

//案例3
var e = {};
e = e.a = {'xx':1}
console.log(e.a);//undefined

没错!!输出是undefined,因为最后的e里面根本没有a属性啊~~
一样的运算逻辑,先给e.a赋值{'xx':1},此时e{a:{'xx':1}},接着给e赋值{'xx':1},此时e{'xx':1},没有a属性,所以输出e.aundefined

附赠运算符优先级在这里插入图片描述
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值