Javascript 理解具有串联字符串的三元运算符

Javascript 理解具有串联字符串的三元运算符,javascript,php,ternary-operator,Javascript,Php,Ternary Operator,我使用的是JavaScript示例,但是,这并不是一个只涉及JavaScript的问题,因为PHP的结果是相同的,我希望有许多语言。我已经用大量的括号“处理”了我的理解不足,但是,现在是处理它的时候了 给出下面的脚本(同时也是在) 我原以为: true hello Jane false hello Mary 1 hello Jane 0 hello Mary null hello Mary 但我得到: true Jane false Jane 1 Jane 0 Jane null Jane

我使用的是JavaScript示例,但是,这并不是一个只涉及JavaScript的问题,因为PHP的结果是相同的,我希望有许多语言。我已经用大量的括号“处理”了我的理解不足,但是,现在是处理它的时候了

给出下面的脚本(同时也是在)

我原以为:

true hello Jane
false hello Mary
1 hello Jane
0 hello Mary
null hello Mary
但我得到:

true Jane
false Jane
1 Jane
0 Jane
null Jane
根据,

相当于:

('hello ' + isjane) ? 'Jane' : 'Mary';
这是因为
+
运算符的优先级高于
?:
三元运算符。(JavaScript的优先级表中的
?:
运算符实际上非常低,仅高于赋值操作,
产生
,和

您可以通过以下方式获得所需的效果:

'hello ' + (isjane ? 'Jane' : 'Mary');
通常,在处理三元运算符时,最好在三元运算符及其操作数周围加上括号,以便明确条件运算的一部分


在中也是如此。

您的三元运算符将计算为true,因为您正在计算串联字符串

您可以这样做:

isJane = isJane ? "Jane" : "Mary";
var str = "hello" + isJane;
或:


值得注意的是,您可以在这里使用括号来帮助:
'hello'+(isjane?'Jane':'Mary')将生成您想要的内容。
'hello ' + (isjane ? 'Jane' : 'Mary');
isJane = isJane ? "Jane" : "Mary";
var str = "hello" + isJane;
var str = "hello" + (isJane ? "Jane" : "Mary");