【发布时间】:2014-01-07 06:18:37
【问题描述】:
在我的代码中,我假设以下 || 短路是安全的:
var $holidayExpandBarOrOpeningHours =
$(".expandBar + .holidayHours_c").prev() || $(".openingHours");
但令我惊讶的是,如果我们用 true 语句短路一个空数组,仍然会返回一个空数组。我将在下面使用一些控制台代码进行演示,我的问题是为什么 [] || true 的计算结果为 []。
false || "expected"
"expected"
false == []
true
[] || "expected"
[]
typeof([])
"object"
({}) || "expected"
Object {}
({}) == false
false
{} == false
SyntaxError: Unexpected token ==
我的一部分认为这是因为数组是一个 object,其评估结果为真,但如果是这种情况,那么基于 ({}) == true 的人会期望 [] == true。
我要注意的最后一件事是使用use 'strict' 模式时的结果是相同的。
【问题讨论】:
-
空数组不是假的
-
为了支持@rgthree 的说法,this 文章有一篇关于您可能感兴趣的真值/假值的简单文章。
-
({}) == true是假的,就像[] == true是假的一样。过程是一样的。
标签: javascript