为什么这个条件表达式需要括号

时间:2014-10-27 23:15:58

标签: javascript string conditional-statements

var notice = "She is" + present ? "" : "n't" + " here."; 

var notice = "She is" + (present ? "" : "n't") + " here.";

在摆弄之后,我注意到它只是

present ? "" : "n't" 
之前的字符串弄乱了它。但是我没有解释为什么,如果我要警告通知(当然还有真实或虚假),它会在第一个例子中显示为空白,并且与第二个例子一起工作正常。

1 个答案:

答案 0 :(得分:0)

当你写:

var notice = "She is" + present ? "" : "n't"  + " here.";

addition operator + takes precedence,因此解析器会将其视为:

var notice = ("She is" + present) ? "" : ("n't"  + " here.");

表达式"She is" + present返回true,无论 present 的值如何,因为它被转换为表达式中的字符串(并且ToBoolean应用于任何非空字符串返回true),因此完整表达式返回"",即条件运算的真实一面。

当分组运算符应用于条件部分时,它优先于所有条件,因此首先计算条件:

var notice = "She is" + (present ? "" : "n't")  + " here.";