这是我无法理解的事情。
我理解JavaScript有 truthy 和 falsy 值:
0
假
未定义
空
NaN的
“”(空字符串)
任何不是虚假价值的东西
如果window.jQuery已正确加载,则它不应评估为false(或更确切地说,undefined
)。以下条件将返回 true
:
window.jQuery != false
但是,以下条件将返回 false
:
window.jQuery == true
(我正在使用==
来代替所有这些,而不是===
,否则window.jQuery将始终求值为false
,除非它实际上是一个包含值{{的布尔值1}})。
这里发生了什么?当然,如果条件未评估为false
,那么它必须评估为false
?
答案 0 :(得分:9)
jQuery
是一个函数,它不是== true
,因此您得到false
,而!= false
就是true
。
我认为您已经认识到==
比较与布尔转换相同。不是。要进行布尔转换,您可以执行Boolean(window.jQuery) == true
,然后获得true
。或者只是!!window.jQuery == true
。
当您转换为布尔值时,然后在除true
,false
,null
之外的所有情况下转换为undefined
, NaN
,""
和0
。
最终如果你想看看是否加载了jQuery,那么你只需要......
if (window.jQuery) {
将为您执行布尔转换。
答案 1 :(得分:2)
在比较不同类型的值时,会隐式发生一些内部转换。假设正在使用jQuery,您将拥有以下内容:
对于window.jQuery!= false:
对于window.jQuery == true,会发生类似的事情:
来源:http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
答案 2 :(得分:1)
当您将值与true
或false
进行比较时,它不只是比较它们的真实性。 true
和false
是特定值,就像不同的数字和字符串一样。仅仅因为两个值具有相同的真实性,并不意味着它们实际上是相等的。
如果要比较两个值的真实性,可以通过强制它们为布尔类型来实现。一个简单的方法是使用布尔反转:
if (!foo == !bar)
会判断foo
和bar
是否具有相同的真实性。
答案 3 :(得分:0)
如果您正在尝试查看jQuery是否已加载。这会告诉你。
if (jQuery) {
// jQuery is loaded
} else {
// jQuery is not loaded
}
查看此博文: