编程语言
首页 > 编程语言> > javascript-了解带有串联字符串的三元运算符

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