了解具有连接字符串的三元运算符

时间:2016-01-27 01:04:30

标签: javascript php ternary-operator

我正在使用JavaScript示例,但是,它并不仅仅是一个JavaScript问题,因为PHP的结果是相同的,我期待很多语言。我通过使用多个括号来“处理”我缺乏理解,但现在是时候处理它了。

给出下面的脚本(以及https://jsfiddle.net/5z4paegb/)..

function testTernary(isjane) {
  var str = 'hello ' + isjane ? 'Jane' : 'Mary';
  console.log(isjane, str);
}
testTernary(true);
testTernary(false);
testTernary(1);
testTernary(0);
testTernary(null);

我原以为:

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

2 个答案:

答案 0 :(得分:4)

根据JavaScript's precedence table

'hello ' + isjane ? 'Jane' : 'Mary';

相当于:

('hello ' + isjane) ? 'Jane' : 'Mary';

这是因为+运算符的优先级高于?:三元运算符。 (?:运算符在JavaScript的优先级表上实际上非常低,仅高于赋值操作yield...,。)

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

'hello ' + (isjane ? 'Jane' : 'Mary');

通常,在处理三元运算符时,最好将括号括在三元运算符及其操作数周围,以便明确清楚条件运算的一部分。

PHP's operator precedence table也是如此。

答案 1 :(得分:0)

您的三元运算符将评估为true,因为您正在评估连接字符串

你可以这样做:

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

或:

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