javascript运算符心得笔记

之前写了关于a++的运算过程,这些天看面试题的时候又发现了一些有深坑的运算符。今天写一下“+=”运算符和“.”运算符。

先看这样一道面试题吧。

var a = 2;
a += a += a++;
console.log(a)    //6

是不是像绕口令?
之前我分析过a++其实是缓存了一个temp=a的原值,再把a自身加一,再用temp进行其他计算,
实际上a+=也是如此,一样是缓存a的原值用来参与计算,等效于a=temp+ 。
先看a+=a++,它的过程如下:

var temp = a;
a = a + 1;    //a++运算
a = temp + temp;   //a+=a++运算

所以a += a += a++其实就等价于:

a = temp + temp + temp;   //6

下面我们再来看一道题:

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

这道题跟之前的题目有个很大的不同,就是用到了”.”运算符,它是所有运算中优先级最高的,会在赋值进行之前先运算。所以运算过程如下:

//先解析a.x, 给a指向的空对象添加属性x
a = {x:undefined};
//再解析a={n:1},a的指向变成了另一个对象{n:1}
a = {n:1}
//再解析a.x=a,这里注意,a.x一开始已经解析过了,这里的a指向的是{x:undefined}
{x:undefined}.x = a;

运算结束后a = {n:1},自然没有x属性了

猜你喜欢

转载自blog.csdn.net/shengandshu/article/details/58332915