我想知道这两者有何不同?
var hello = foo?foo:bar;
对比
var hello = foo || bar;
你能解释一下吗?和一些案例?还是两者相同?
PS : foo/bar 应该都像 string/int/obj/boolean...
最佳答案
? :
被称为 条件运算符 它需要三个参数(这就是它有时被称为“三元”运算符的原因):要测试的东西,如果测试为真则返回的东西,以及一些东西如果测试错误则返回。*
第二个是 JavaScript 的 curiously-powerful logical OR operator .它接受两个参数。它评估第一个操作数,如果为真,则返回它;如果第一个是假的,它计算并返回第二个操作数。
所以这两者之间的区别在于:使用条件运算符,foo
可能会被计算两次(如果它为真)。使用 ||
,foo
只计算一次。 foo
和 bar
是否只是简单的变量引用并不重要,但请考虑:
var hello = foo() ? foo() : bar();
// vs
var hello = foo() || bar();
您可以看到 foo()
被评估多少次是多么重要,如果它做了任何重要的工作或有任何 side effects .
(* 那么什么是“truthy”和“falsey”值?“falsey”值是0
、""
、NaN
、undefined
、null
,当然还有 false
。其他一切都是“真实的”。)
关于javascript - 简写 if/else 语句 : foo? foo:bar vs foo ||酒吧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535079/