为什么我的JavaScript OR语句没有返回正确的值?

时间:2013-09-12 11:42:04

标签: javascript operators undefined operator-precedence

我坚持以下内容:

foo = properties[field] || overrides.default || config.widget.default || undefined;

console.log(properties[field])     // undefined
console.log(overrides.default)     // 0
console.log(config.widget.default) // undefined

据我了解,foo应为0。然而......它是undefined

这仍然有效:

foo = properties[field] || overrides.default;

但是只要我添加另一个OR选项,它就不再起作用了。

问题
为什么value=0的第2个操作数不会覆盖undefined个操作数?

谢谢!

1 个答案:

答案 0 :(得分:1)

||运算符返回其左侧操作数(如果它是真值),否则返回右侧操作数。

在您的示例中,所有操作数都具有falsey值,因此复合||语句返回最右侧的值。

在JS中,以下内容都是假的:0""(空字符串),undefinednullNaN。当然还有false。所有其他值都是真实的(包括"0""false"等字符串,因为它们不是空字符串。)