javascript - 理解连接字符串的三元运算符

标签 javascript php ternary-operator

我正在使用 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也是如此

关于javascript - 理解连接字符串的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027021/

相关文章:

php - PHP MySQL 语句中的双花括号是什么意思?

javascript - 隐藏/显示 PHP 生成表单的按钮

Java 三元运算符设置 True 或 false

javascript - 如何将 if/else 转换为三元 if/else

javascript - jQuery 事件中的三元运算符

javascript - 仅匹配特定文本 - jQuery 字符串

C#:如何在 Javascript 中使用全局变量

php - 从非产品页面获取某个类别中所有产品的制造商

javascript - 如何拉伸(stretch)整个窗口的背景?

javascript - 迭代集合对象 MongoDB 时如何使用 forEach?