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

Javascript Comparison Operators != vs !==

本文关键字:vs 运算符 比较 Javascript      更新时间:2023-09-26

可能的重复项:
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 是值,产生真或假。这样的比较 按如下方式执行:

  1. 如果 Type(x( 与 Type(y( 不同,则返回 false。
  2. 如果 Type(x( 是"未定义",则返回 true。
  3. 如果 Type(x( 为 Null,则返回 true。
  4. 如果 Type(x( 是数字,则

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

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

    三.如果 x 与 y 的数值相同,则返回 true。

    d.如果 x 为 +0,y 为 -0,则返回 true。

    e.如果 x 为 -0,y 为 +0,则返回 true。

    f. 返回假数。

  5. 如果 Type(x( 是字符串,则如果 x 和 y 是完全相同的字符序列(相同的长度和相同的字符在 相应的职位(;否则,返回 false。

  6. 如果 Type(x( 是布尔值,如果 x 和 y 都为真或都为假,则返回 true;否则,返回 false。
  7. 如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。注意:此算法不同于同值算法 (9.12( 在处理有符号零和 NaN 时。

11.9.3 抽象相等比较算法

比较 x == y,其中 x 和 y 是值,产生 true 或 假。此类比较按如下方式执行:

  1. 如果 Type(x( 与 Type(y( 相同,则

    一个。如果 Type(x( 是 Undefined,则返回 t rue。

    二.如果 Type(x( 为 Null,则返回 true。

    三.如果 Type(x( 是数字,则

    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( 是字符串,则如果 x 和 y 恰好是 true 相同的字符序列(相同的长度和相同的字符 相应的职位(。否则,返回 false。

    e.如果 Type(x( 是布尔值,如果 x 和 y 都为真或 都是假的。否则,返回 false。 f.如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。

  2. 如果 x 为空且 y 未定义,则返回 true。
  3. 如果 x 未定义且 y 为空,则返回 true。
  4. 如果 Type(x( 是 Number 且 Type(y( 是 String,则返回比较结果 x == ToNumber(y(。
  5. 如果 Type(x( 是字符串,Type(y( 是 Number,则返回比较结果 ToNumber(x( == y。
  6. 如果 Type(x( 是布尔值,则返回比较结果 ToNumber(x( == y。
  7. 如果 Type(y( 是布尔值,则返回比较结果 x == ToNumber(y(。
  8. 如果 Type(x( 是字符串或数字,而 Type(y( 是 Object,则返回比较结果 x == ToPrimitive(y( 。
  9. 如果 Type(x( 是 Object 并且 Type(y( 是 String 或 Number,则返回比较 ToPrimitive(x( == y 的结果。
  10. 返回假

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

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

另一个版本要求严格相等 - 两个值必须属于同一类型并具有相同的值。 大多数情况下,这是您应该实际使用的那个。

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

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

不同之处在于,仅当变量具有相同类型且不相等时,!== 才返回 true。