i+=1&&i++ 是怎么运行的?

var i=5;
 if(i+=1&&i++){
    console.log(i);
 }

结果是10 咋运行的

阅读 4.8k
5 个回答

运算符优先级问题.
Javascript operator precedence table
postfix ++ > && > +=.
相当于(i+=(1&&(i++))). 此外,由于 Javascript 中逻辑运算符会返回对象, 所以1&&5结果为5. 所以是10.

不是很清楚,我试了其他几个数,都是初始数据的2倍.
但是测试了之后发现执行优先级是:

i+=(1&&i++)

然后:

1&&i++

的值是5,所以。。。

运算符优化级,其实际相当于:

var i=5;
 if(i+=(1&&i++)){
    console.log(i);
 }

最后,谁写这种代码拉出去枪毙了。

这个就相当于

var i=5;
if(i+=i++){
    console.log(i);
}

my god...

i = 5
i += 1 && i++

相当于

i= 5
t1 = i++ // t1 = 5
tmp = 1 && t1 // tmp = 1 && 5 = 5
i = i + tmp // i = 5 + 5 = 10

按编译原理的过程去解析这个语句

i += 1 && i++

等价于

i = i + (1 && i++)

从左到右执行

大概就这样吧...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题