1

这是我无法理解的事情。

我的理解是 JavaScript 有值和值:

虚假值:

0
false
undefined
null
NaN
"" (空字符串)

真实的价值观:

任何不是虚假值的东西

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

window.jQuery != false

但是,以下条件将返回false

window.jQuery == true

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

这里发生了什么?当然,如果一个条件不计算为false,那么它必须计算为true?

4

4 回答 4

10

jQuery是一个函数,它不是== true,所以你得到false,它就是!= false你得到true

我认为您已经知道==比较与布尔转换相同。它不是。要进行布尔转换,你可以做Boolean(window.jQuery) == true,你会得到true. 或者只是!!window.jQuery == true

当您转换为布尔值时,除了、、、和之外,您true在所有情况下都会转换为。falsenullundefinedNaN""0

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

if (window.jQuery) {

这将为您执行布尔转换。

于 2013-09-02T21:32:14.430 回答
3

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

对于 window.jQuery != false:

  1. window.jQuery != false
  2. window.jQuery.toString() != 0
  3. “函数(e,t){返回新的x.fn.init(e,t,r)}”!= 0
  4. Number("函数 (e,t){return new x.fn.init(e,t,r)}") != 0
  5. 南!= 0
  6. 真的

对于 window.jQuery == true,会发生类似的事情:

  1. window.jQuery == 真
  2. window.jQuery.toString() == 1
  3. "函数 (e,t){返回新的 x.fn.init(e,t,r)}" == 1
  4. Number("函数 (e,t){return new x.fn.init(e,t,r)}") == 1
  5. 南== 1
  6. 错误的

来源:http: //javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

于 2013-09-02T21:42:49.243 回答
1

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

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

if (!foo == !bar)

会告诉是否foo并且bar具有相同的真实性。

于 2013-09-02T21:45:27.590 回答
0

如果您想查看是否加载了 jQuery。这会告诉你。

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

看看这篇博文:

检查是否加载了 jQuery

于 2013-09-02T21:45:59.050 回答