我正在使用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
答案 0 :(得分:4)
根据JavaScript's precedence table,
'hello ' + isjane ? 'Jane' : 'Mary';
相当于:
('hello ' + isjane) ? 'Jane' : 'Mary';
这是因为+
运算符的优先级高于?:
三元运算符。 (?:
运算符在JavaScript的优先级表上实际上非常低,仅高于赋值操作yield
,...
和,
。)
您可以通过以下方式获得所需的效果:
'hello ' + (isjane ? 'Jane' : 'Mary');
通常,在处理三元运算符时,最好将括号括在三元运算符及其操作数周围,以便明确清楚条件运算的一部分。
答案 1 :(得分:0)
您的三元运算符将评估为true,因为您正在评估连接字符串
你可以这样做:
isJane = isJane ? "Jane" : "Mary";
var str = "hello" + isJane;
或:
var str = "hello" + (isJane ? "Jane" : "Mary");