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

时间:2013-10-23 07:08:06

标签: javascript if-statement shorthand shorthand-if

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

var hello = foo?foo:bar;

VS

var hello = foo || bar;

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

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

1 个答案:

答案 0 :(得分:6)

? :被称为条件运算符它需要三个参数(这就是为什么它有时被称为“三元”运算符):要测试的东西,如果测试是返回的东西如果测试是假的,可以返回一些东西。*

第二个是JavaScript的curiously-powerful logical OR operator。它接受两个参数。它评估第一个操作数,如果真的那么,则返回它;如果第一个是假的,它会计算并返回第二个操作数。

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

var hello = foo() ? foo() : bar();
// vs
var hello = foo() || bar();

您可以查看评估foo()多少次,如果它做了大量工作或有side effects


(*那么“truthy”和“falsey”值是什么?“falsey”值是0""NaNundefined,{{1当然null。其他一切都是“真实的”。)