或者在三元运算符中,使用&&

Ale*_*ide 2 javascript if-statement ternary-operator

使用传统的if语句我可以这样做:

if(a===0 || b===0) {console.log('aloha amigo')};
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用三元运算符执行相同的操作时,如下所示:

a===0 || b===0 && console.log('aloha amigo')
Run Code Online (Sandbox Code Playgroud)

我只是得到意外的错误||.

根据这个答案:Precedence:Logical或vs. Ternary运算符,我们可以使用它

condition1 || condition2 ? do if true : do if false
Run Code Online (Sandbox Code Playgroud)

(对不起,我不知道? :在这种情况下如何调用符号),但我不确定如何使用它运行&&(这意味着只有在返回时运行代码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');
Run Code Online (Sandbox Code Playgroud)

这是链接

Nin*_*olz 7

只需使用括号来防止运算符优先于&&结束||

(a === 0 || b === 0) && console.log('aloha amigo')
Run Code Online (Sandbox Code Playgroud)

如果没有括号,您将获得(现在显示优先级)不同的结果.

a === 0 || (b === 0 && console.log('aloha amigo'))
^^^^^^^                                             first evaluation
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  second evaluation
Run Code Online (Sandbox Code Playgroud)

  • @ alex.iron - 可读性当然是读者的眼​​睛.:-)更短!=更好.将缩小物留给缩小器.相反,写清楚,易于修改的代码.在这里,带有适当块的"if"是两个字符更长,但更容易在线下修改.无论如何,快乐的编码! (4认同)
  • @ alex.iron - 更大的问题是为什么你浪费时间让你的代码更不易读,更难维护,更容易出错?**; - )**只需使用`if`.这就是它的用途.甚至该语言的作者Brendan Eich也称`condition && doSomething();``&&`运算符的*abusage*. (3认同)