Open jirengu opened 7 years ago
(object2 > object1 +-- object1) + true)
object1和object2 都是对象,所以运算的时候会调用valueOf方法,所以得到:
(2 > 1 + --1) + true)
--1为前递减所以为0,2 > 1为true 得到:
(true + 0) + true)
布尔值在运算时会自动转为数字 true -> 1 false -> 0
得到:
(1+ 0) + 1)
所以结果是2
(object2 > object1 +-- object1) + true);
先算大于号
obj2 > obj1 == 2 > 1 == true;
=>
true + -- obj1 == true + --1 == true + 0 == 1 + 0 == 1;
=>
1 + true == 1 + 1 == 2
故输出2
参考MDN的运算符优先级 () 19级 -- 15级 + 13级 >11 级 (object2 > object1 +-- object1) + true) object1和object2 都是对象,所以运算的时候会调用valueOf方法,所以得到: (2 > 1 + --1) + true) => ((2>1 + 0)+true) => ((2>1)+true) >=(true+true) >=(1+1) >=2
结果输出是2;
原因:
1.对对象进行的计算会先调用对象的valueOf方法,无结果再调用toString方法,这里的两个对象都有valueOf方法,所以调用成功,所以式子(object2 > object1 +-- object1)
,转化为
(2 > 1 + --1) + true
2.在2 > 1 + --1
中,自减符号优先级高,先计算--1
,得出结果0,2 > 1
结果为true,最后式子变成
(true + 0) + true
3.因为加法运算符,true转化为1,所以结果为2
如下代码输出什么? 解释原因