理解连接字符串的三元运算符
Understanding ternary operators with concatenated strings
我正在使用 JavaScript 示例,但是,这并不意味着 JavaScript 只是一个问题,因为 PHP 的结果是相同的,而且我希望使用多种语言。我已经 "dealt" 因使用大量括号而缺乏理解,但是,是时候处理它了。
给出下面的脚本(以及 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 的优先级 table 上非常低,仅高于赋值操作 yield
、...
和 ,
.)
您可以通过以下方式获得您想要的效果:
'hello ' + (isjane ? 'Jane' : 'Mary');
一般来说,在处理三元运算符时,最好在三元运算符及其操作数两边加上括号,以便清楚地表明什么是条件运算的一部分。
你的三元运算符将计算为真,因为你正在计算一个连接的字符串,
你可以这样做:
isJane = isJane ? "Jane" : "Mary";
var str = "hello" + isJane;
或:
var str = "hello" + (isJane ? "Jane" : "Mary");
我正在使用 JavaScript 示例,但是,这并不意味着 JavaScript 只是一个问题,因为 PHP 的结果是相同的,而且我希望使用多种语言。我已经 "dealt" 因使用大量括号而缺乏理解,但是,是时候处理它了。
给出下面的脚本(以及 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 的优先级 table 上非常低,仅高于赋值操作 yield
、...
和 ,
.)
您可以通过以下方式获得您想要的效果:
'hello ' + (isjane ? 'Jane' : 'Mary');
一般来说,在处理三元运算符时,最好在三元运算符及其操作数两边加上括号,以便清楚地表明什么是条件运算的一部分。
你的三元运算符将计算为真,因为你正在计算一个连接的字符串,
你可以这样做:
isJane = isJane ? "Jane" : "Mary";
var str = "hello" + isJane;
或:
var str = "hello" + (isJane ? "Jane" : "Mary");