var a = 123;
a = a > 100 ? 100 : a < 50 ? 50 : a
a; // 100
var a = 123;
a = (a > 100 ? 100 : a < 50) ? 50 : a
a; // 50
为什么第二段代码输出的是50
var a = 123;
a = a > 100 ? 100 : a < 50 ? 50 : a
a; // 100
var a = 123;
a = (a > 100 ? 100 : a < 50) ? 50 : a
a; // 50
为什么第二段代码输出的是50
var a = 123;
a = (a > 100 ? 100 : a < 50) ? 50 : a
a; // 50
一点点拆分,a > 100 ? 100 : a < 50
,由于a
是123
,所以前面的表达式结果是100
,
那么就变成a = 100 ? 50 : a
,那结果当然是50
啦
<表达式1> ? <表达式2> : <表达式3>; "?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。
a > 100 ? 100 : a < 50 的结果为100,所以就变成了a = 100 ? 50 : a; 100肯定为真,所以三目运算的结果就为50
第二段可以翻译成:
临时变量 tmp
if(a>100){
tmp=100;
}else{
tmp=a<50;
}
if(tmp){
a=50;
}else{
a=a;
}
很明显 第一个 a>100 成立所以 tmp=100 为 true 所以返回 a=50
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
列表项目
123大于100,走前半部分,a=100,a已经赋值
a=100为true所以a=100?50:a会走前半部分
a=50
至于第一个例子,因为没有(),所有后半部分a < 50 ? 50 : a根本不用执行