一道有意思的赋值题

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

案例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

附赠运算符优先级在这里插入图片描述

发布了20 篇原创文章 · 获赞 38 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/jiamiao66/article/details/103928630