window.jQuery == true的计算结果为false,尽管window.jQuery!= false的计算结果为true

时间:2013-09-02 21:30:00

标签: javascript

这是我无法理解的事情。

我理解JavaScript有 truthy falsy 值:

假值:

0

未定义

NaN的
“”(空字符串)

Truthy值:

任何不是虚假价值的东西

如果window.jQuery已正确加载,则它不应评估为false(或更确切地说,undefined)。以下条件将返回 true

window.jQuery != false

但是,以下条件将返回 false

window.jQuery == true

(我正在使用==来代替所有这些,而不是===,否则window.jQuery将始终求值为false,除非它实际上是一个包含值{{的布尔值1}})。

这里发生了什么?当然,如果条件未评估为false,那么它必须评估为false

4 个答案:

答案 0 :(得分:9)

jQuery是一个函数,它不是== true,因此您得到false,而!= false就是true

我认为您已经认识到==比较与布尔转换相同。不是。要进行布尔转换,您可以执行Boolean(window.jQuery) == true,然后获得true。或者只是!!window.jQuery == true

当您转换为布尔值时,然后在除truefalsenull之外的所有情况下转换为undefinedNaN""0

最终如果你想看看是否加载了jQuery,那么你只需要......

if (window.jQuery) {

将为您执行布尔转换。

答案 1 :(得分:2)

在比较不同类型的值时,会隐式发生一些内部转换。假设正在使用jQuery,您将拥有以下内容:

对于window.jQuery!= false:

  1. window.jQuery!= false
  2. window.jQuery.toString()!= 0
  3. “function(e,t){return new x.fn.init(e,t,r)}”!= 0
  4. Number(“function(e,t){return new x.fn.init(e,t,r)}”)!= 0
  5. NaN!= 0
  6. 对于window.jQuery == true,会发生类似的事情:

    1. window.jQuery == true
    2. window.jQuery.toString()== 1
    3. “function(e,t){return new x.fn.init(e,t,r)}”== 1
    4. Number(“function(e,t){return new x.fn.init(e,t,r)}”)== 1
    5. NaN == 1
    6. 来源:http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

答案 2 :(得分:1)

当您将值与truefalse进行比较时,它不只是比较它们的真实性。 truefalse是特定值,就像不同的数字和字符串一样。仅仅因为两个值具有相同的真实性,并不意味着它们实际上是相等的。

如果要比较两个值的真实性,可以通过强制它们为布尔类型来实现。一个简单的方法是使用布尔反转:

if (!foo == !bar)

会判断foobar是否具有相同的真实性。

答案 3 :(得分:0)

如果您正在尝试查看jQuery是否已加载。这会告诉你。

if (jQuery) {  
    // jQuery is loaded  
} else {
    // jQuery is not loaded
}

查看此博文:

Check if jQuery is Loaded