【问题标题】:OR in ternary operator, using &&OR 在三元运算符中,使用 &&
【发布时间】:2018-12-14 20:13:30
【问题描述】:

使用传统的 if 语句我可以做到这一点:

if(a===0 || b===0) {console.log('aloha amigo')};

但是当我尝试用三元运算符做同样的事情时,像这样:

a===0 || b===0 && console.log('aloha amigo')

我只是收到关于意外 || 的错误。

根据这个答案:Precedence: Logical or vs. Ternary operator,我们可以使用

condition1 || condition2 ? do if true : do if false

(抱歉,在这种情况下我不确定如何调用? : 符号),但我不确定如何使用&& 运行它(这意味着只有在返回true 时才运行代码)。

我创建了一个 codepen 来轻松测试它。这是整个代码:

var a = 0;
var b = 1;

a===0 || b===0 ? console.log('Works here') : console.log('And here');

a===0 || b===0 && console.log('Doesn\'t work here');

a===0 && console.log('The && works for a single test');

Here's the link

【问题讨论】:

  • “但是当我尝试用三元运算符做同样的事情时……” 那不是三元运算符(一个接受三个操作数的运算符)。那是两个二元运算符(||&& -- 接受 two 操作数的运算符)。 JavaScript 目前只有一个三元运算符:条件运算符condition ? ifTrue : ifFalse。它可能会在某个阶段添加另一个三元组,但现在它只有一个。

标签: javascript if-statement ternary-operator


【解决方案1】:

只需带括号以防止&& 的运算符优先于||

(a === 0 || b === 0) && console.log('aloha amigo')

没有括号,你会得到(现在用显示优先级)不同的结果。

a === 0 || (b === 0 && console.log('aloha amigo'))
^^^^^^^                                             first evaluation
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  second evaluation

【讨论】:

  • 好吧,这行得通。但是为什么我需要把它放在括号里呢?我会在 10 分钟内选出最好的
  • @alex.iron - 更大的问题是你为什么要浪费你的时间让你的代码可读性更差、更难维护、更容易出错? ;-) 只需使用if。这就是它的用途。甚至该语言的作者 Brendan Eich 也将condition && doSomething(); 称为&& 运算符的滥用
  • 好吧,我看到它被人们使用了,这很有意义,所以我开始使用它。虽然它看起来可读。不是更短的 if 语句吗?
  • @alex.iron - 可读性当然在读者眼中。 :-) 更短!= 更好。将缩小留给缩小器。相反,编写清晰、易于修改的代码。在这里,带有适当块的if 会长几个字符,但更容易修改。无论如何,编码愉快!
  • @alex.iron - :-) 我希望我上面的夸张是出于友好的精神。书面沟通太难了。编码愉快!
猜你喜欢
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2020-05-18
  • 2020-05-21
  • 2013-07-06
  • 1970-01-01
相关资源
最近更新 更多