Javascript三元运算符结果
我正在使用C#编写一个小实用程序来编译javascript块。我试图理解三元运算符的执行流程。现在,当我使用Chrome或Firefox运行javascript时:Javascript三元运算符结果,javascript,ternary-operator,Javascript,Ternary Operator,我正在使用C#编写一个小实用程序来编译javascript块。我试图理解三元运算符的执行流程。现在,当我使用Chrome或Firefox运行javascript时: var k = 27; var o = 78; var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P"; alert(a); var k=27; var o=78; var a=k11?“T”:“F”:o
var k = 27;
var o = 78;
var a = k < 100 ? o+=2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);
var k=27;
var o=78;
var a=k<100?o+=2>11?“T”:“F”:o<100?“J”:“P”;
警报(a);
如果“o+=2”返回false,它应该给我结果“T”或“F”。但是它返回的不是那些“78F”。谁能解释一下背后的逻辑是什么。基于:
赋值运算符的优先级低于比较运算符
因此,您的代码将按如下方式进行评估
true
?o+=2>11?“T”:“F”:o<100?“J”:“P”李>
true
?o+=false
?“T”:“F”:o<100?“J”:“P”李>
true
?o+=“F”
:o<100?“J”:“P”李>
true
<代码>“78F”:o<100?“J”:“P”李>
“78F”
var a = (k < 100) ? (o+=2) > 11 ? "T" : "F" : (o < 100) ? "J" : "P";
console.log(a); // T
var a=(k<100)?(o+=2)>11?“T”:“F”:(o<100)?“J”:“P”;
console.log(a);//T
您在o
上使用的是+=
,而不仅仅是+
var a = k < 100 ? o+2 > 11 ? "T" : "F" : o < 100 ? "J" : "P";
var a = (k < 100 ? (o+2 > 11 ? "T" : "F") : (o < 100 ? "J" : "P"));
var a=k<100?o+2>11?“T”:“F”:o<100?“J”:“P”;
此外,使用括号将使其更具可读性:
var a=(k<100?(o+2>11?):“T”:“F”):(o<100?:“J”:“P”);
var k=27;
var o=78;
var a=k<100?(o+=2)>11?“T”:“F”:o<100?“J”:“P”;
警报(a);
上述代码按您的预期工作。
您可能认为将首先处理+=
运算符。这实际上是一种
k<100?o+=(2>11?:“T”:“F”):(o<100?:“J”:“P”)代码>
因为赋值运算符=
右侧的任何内容都是先按从左到右的顺序处理的,所以2>11?“T”:“F”
首先计算我建议不要嵌套三元运算符。虽然使用一行程序总是很好的,但是如果将其拆分为if-else语句,其他开发人员就更容易理解了。我曾经不得不在一个应用程序上工作,该应用程序的部件中有多达6个嵌套三元组。这是一个需要调试的庞然大物。请使用大括号(
和)
来区分表达式,让每个人的眼睛都更容易看到。嵌套三元组是一个糟糕的主意。我正在制作一个javascript编译器。我一般不这样写代码。但若并没有语法错误,编译器应该从用户那个里获取任何信息。
var k = 27;
var o = 78;
var a = k < 100 ? (o+=2) > 11 ? "T" : "F" : o < 100 ? "J" : "P";
alert(a);