Javascript比较运算符!= vs!==

可能重复:
Javascript === vs ==:这与我使用的“平等”运算符有关吗?
JavaScript和==和===之间的区别

我有两个变量要比较。

结果不应该相等,在哪种情况下我需要使用!=和!==?

因为当我使用这两个操作符它正常工作,但我需要确切知道有什么区别。


关于他们的差异的人类可读文本

使用!=====会比== / !=做更严格的比较。 前者将检查被比较的对象是否具有相同的类型,以及值是否匹配。

使用==将使隐式转换成为可能,参见下面的例子。

(0 ==  '0') // true
(0 === '0') // false

('' ==  0 ) // true, the string will implicitly be converted to an integer
('' === 0 ) // false, no implicit cast is being made

标准说什么?

11.9.6严格的平等比较

算法比较x === y,其中x和y是值,产生true或false。 这样的比较如下进行:

  • 如果Type(x)与Type(y)不同,则返回false。
  • 如果Type(x)是Undefined,则返回true。
  • 如果Type(x)是Null,则返回true。
  • 如果Type(x)是Number,那么

    一个。 如果x是NaN,则返回false。

    b。如果y是NaN,则返回false。

    C。 如果x与y的Number值相同,则返回true。

    d。 如果x是+0且y是0,则返回true。

    即 如果x是0且y是+0,则返回true。

    F。 返回false。

  • 如果Type(x)是String,则返回true,如果x和y是完全相同的字符序列(相同长度和相同位置的相同字符); 否则,返回false。

  • 如果Type(x)是布尔型,则返回true,如果x和y都为真或者都为假; 否则,返回false。
  • 如果x和y引用同一个对象,则返回true。 否则,返回false。 注:该算法在处理有符号零和NaN方面与SameValue算法(9.12)不同。

  • 11.9.3抽象等式比较算法

    比较x == y,其中x和y是值,产生true或false。 这样的比较如下进行:

  • 如果类型(x)与类型(y)相同,则

    一个。 如果Type(x)未定义,则返回t rue。

    湾 如果Type(x)是Null,则返回true。

    C。 如果Type(x)是Number,那么

    1. If x is NaN, return false.
    
    2. If y is NaN, return false.
    
    3. If x is the same Number value as y, return true.
    
    4. If x is +0 and y is 0, return true.
    
    5. If x is 0 and y is +0, return true.
    
    6. Return false.
    

    d。 如果Type(x)是String,那么如果x和y是完全相同的字符序列(相同长度和相应位置中的相同字符),则返回true。 否则,返回false。

    即 如果Type(x)是布尔值,则返回true,如果x和y都为真或者都为假。 否则,返回false。 F。 如果x和y引用同一个对象,则返回true。 否则,返回false。

  • 如果x为null且y未定义,则返回true。
  • 如果x未定义且y为空,则返回true。
  • 如果Type(x)是Number且Type(y)是String,则返回比较结果x == ToNumber(y)。
  • 如果Type(x)是String并且Type(y)是Number,则返回比较结果ToNumber(x)== y。
  • 如果Type(x)是布尔型,则返回比较结果ToNumber(x)== y。
  • 如果Type(y)是布尔型,则返回比较结果x == ToNumber(y)。
  • 如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y)。
  • 如果Type(x)是Object且Type(y)是String或Number,则返回比较结果ToPrimitive(x)== y。
  • 返回false

  • 不同之处在于前者( != )版本会在比较之前强制两个变量类型兼容。 因此:

    "" == 0    -> true
    "" === 0   -> false
    

    另一个版本需要严格的平等 - 两个值必须是相同的类型并且具有相同的值。 大多数情况下,这是你应该使用的。

    在对象严格相等的情况下,意味着它们实际上是同一个对象。 对象之间的比较不会执行对象内容的逐场比较。

    有关更多信息,请参阅https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators。


    区别很简单:!==仅当变量具有相同类型且相等时才返回。

    链接地址: http://www.djcxy.com/p/3257.html

    上一篇: Javascript Comparison Operators != vs !==

    下一篇: when to use === operator check in JavaScript?