【问题标题】:jsHint error saying I should use "===" [duplicate]jsHint 错误说我应该使用“===” [重复]
【发布时间】:2013-11-19 15:42:01
【问题描述】:

我的代码给我一个 jsHint 错误。我正在尝试这样做:

if (data.result == 't' || task == 'show') {

但它告诉我应该用“===”替换“==”有人能告诉我为什么它会给出这个信息吗?

【问题讨论】:

标签: javascript


【解决方案1】:

=== 是严格相等运算符。

== 是普通的相等运算符,== 将其操作数转换为相同类型,如果它们尚未属于相同类型。

因此,尽管"" == 0 之类的内容属于不同类型,但仍有可能为您提供真实的信息。

由于涉及到隐式转换,您可能不会因为它是自动发生的而忽略它,因此存在一些难以追踪的错误或错误的危险和可能性。

=== 不会转换它的操作数,它只会比较它们。

【讨论】:

  • 但他没有写"" == 0,所以你没有回答问题。
  • @LightnessRacesinOrbit 我只是举了一个可能出错的例子。不管怎样,昆汀总结了我想说的话。
【解决方案2】:

静默类型转换可能是错误的来源。如果您避免在比较时在数据类型之间进行转换,那么您就可以避免许多此类错误。

【讨论】:

    【解决方案3】:

    === 表示没有类型强制的相等。 === 运算符不会进行转换,它只会比较操作数。

    sdfxhere给出的例子对理解这个很有帮助:

    0==false   // true
    0===false  // false, because they are of a different type
    1=="1"     // true, auto type coercion
    1==="1"    // false, because they are of a different type
    

    来自MDN

    JavaScript 既有严格的比较,也有类型转换(抽象)的比较。 只有当操作数是 同类型。更常用的抽象比较(例如,==) 在进行比较之前将操作数转换为相同的类型。 对于关系抽象比较(例如,

    比较特点:

    • 当两个字符串具有相同的字符序列、相同的长度和对应的字符时,它们是严格相等的
      职位。
    • 两个数字在数值相等时严格相等(具有相同的数值)。 NaN 不等于任何东西, 包括 NaN。正负零等于一 另一个。
    • 如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。
    • 对于严格比较或抽象比较,两个不同的对象永远不会相等。
    • 仅当操作数引用相同的对象时,比较对象的表达式才为真。
    • Null 和未定义类型是 ==(但不是 ===)。

    【讨论】:

      猜你喜欢
      • 2013-02-14
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多