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

标签 javascript if-statement shorthand shorthand-if

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

var hello = foo?foo:bar;

对比

var hello = foo || bar;

你能解释一下吗?和一些案例?还是两者相同?

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

最佳答案

? : 被称为 条件运算符 它需要三个参数(这就是它有时被称为“三元”运算符的原因):要测试的东西,如果测试为真则返回的东西,以及一些东西如果测试错误则返回。*

第二个是 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""NaNundefinednull,当然还有 false。其他一切都是“真实的”。)

关于javascript - 简写 if/else 语句 : foo? foo:bar vs foo ||酒吧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535079/

相关文章:

javascript - AS3 : Browser is Automatically telling Flash Player to Zoom Out

javascript - 使用 Javascript 更改基于 getMonth() 的链接类

通过正则表达式进行 JavaScript 文本验证

javascript - 当我禁用标准浏览器使用 javascript 提交时,为什么 Ckeditor 值返回空?

jquery - jQuery 库如何使用 $ 代替 "JQuery"来引用对象?

css - 速记 CSS 与普通 CSS 不同

javascript简写语法

if-statement - 条件测试应该得到阳性结果还是阴性结果?

c++ - 用于比较复合类型映射元素的 find_if 的 lambda 函数谓词

R: "Binning"分类变量