速记 if/else 语句 : foo?foo:bar vs foo ||酒吧



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

var hello = foo?foo:bar;

var hello = foo || bar;

你能解释一下吗?和一些案例的例子?或者两者都是一样的?

PS : foo/bar 应该都像字符串/int/obj/布尔值...

? :称为条件运算符 它需要三个参数(这就是为什么它有时被称为"三元"运算符):要测试的内容,如果测试为真则返回的内容,如果测试为假,则返回的内容。

第二个是JavaScript非常强大的逻辑OR运算符。它接受两个参数。它计算第一个操作数,如果它是真实的,则返回它;如果第一个为 false,则计算并返回第二个操作数。

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

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

您可以看到评估foo()次数的重要性,如果它做了任何重要的工作或有任何副作用。


(*那么什么是"真"和"假"值?"假"值是0""NaNundefinednull,当然还有false。其他一切都是"真实的"。

最新更新