javascript-了解带有串联字符串的三元运算符
作者:互联网
我使用的是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');
通常,在处理三元运算符时,最好在三元运算符及其操作数周围加上括号,以便清楚地知道什么是条件运算的一部分.
PHP’s operator precedence table中也是如此.
标签:ternary-operator,javascript,php 来源: https://codeday.me/bug/20191027/1944358.html