我正在使用 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
最佳答案
根据 JavaScript's precedence table ,
'hello ' + isjane ? 'Jane' : 'Mary';
相当于:
('hello ' + isjane) ? 'Jane' : 'Mary';
这是因为 +
运算符的优先级高于 ?:
三元运算符。 (?:
运算符实际上在 JavaScript 的优先级表中非常低,仅高于赋值操作、yield
、...
和 ,
.)
您可以通过以下方式获得您想要的效果:
'hello ' + (isjane ? 'Jane' : 'Mary');
一般来说,在处理三元运算符时,最好在三元运算符及其操作数两边加上括号,以便清楚地表明什么是条件运算的一部分。
关于javascript - 理解连接字符串的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027021/