简写if/else语句:foo?foo:bar vs foo || 酒吧

l2a*_*lba 1 javascript if-statement shorthand-if shorthand

我想知道这两者有何不同?

var hello = foo?foo:bar;
Run Code Online (Sandbox Code Playgroud)

VS

var hello = foo || bar;
Run Code Online (Sandbox Code Playgroud)

你能解释一下吗?还有一些案例?或者两者都一样?

PS:foo/bar应该都像string/int/obj/boolean ...

T.J*_*der 6

? :被称为条件运算符它需要三个参数(这就是为什么它有时被称为"三元"运算符):要测试的东西,如果测试是真实的话要返回的东西,以及如果测试是假的则返回的东西.*

第二个是JavaScript 奇特强大的逻辑OR运算符.它接受两个参数.它评估第一个操作数,如果真的那么,则返回它; 如果第一个是假的,它会计算并返回第二个操作数.

所以这两者之间的区别在于:使用条件运算符,foo可以进行两次求值(如果它是真的).使用||,foo只评估一次.这并不重要,如果foobar只是简单的变量引用,但考虑:

var hello = foo() ? foo() : bar();
// vs
var hello = foo() || bar();
Run Code Online (Sandbox Code Playgroud)

您可以看到foo()评估的次数是多少,如果它有任何重要的工作或有任何副作用.


(*那么,什么是"truthy"和"falsey"值吗? "falsey"值0,"",NaN,undefined,null,当然false,其他的都是"truthy".)