代码之家  ›  专栏  ›  技术社区  ›  z-boss

需要一个示例来解释为什么使用比较操作数!=and==在JavaScript中被认为是不好的做法

  •  16
  • z-boss  · 技术社区  · 16 年前

    正如我在某个地方读到的,建议使用!==和===相反。

    7 回复  |  直到 6 年前
        1
  •  24
  •   Totty    16 年前

    “如果要检查两个操作数是否具有相同的类型和值,请使用严格相等运算符(==)。如果只关心值且类型无关紧要,请使用常规相等运算符(==)。例如,如果一个操作数是数字5,另一个操作数是字符串”5,标准相等运算符将返回true,但由于它们不是同一类型,严格相等运算符将返回false http://www.webreference.com/js/column26/stricteq.html

        2
  •  19
  •   Joel Coehoorn    16 年前

    这取决于你想做什么。

    !== 和===比较两个值 类型

    5 == "5"
    

    上述情况将返回真值。如果这不是您想要的,您应该这样做:

    5 === "5"
    

    这将返回错误。

        3
  •  4
  •   Rahul    16 年前

    ==和!==接线员。

    使用 反对虚假的价值观。

    从…起 Douglas Crockford's Code Conventions for the JavaScript Programming Language

    更多信息请参见托蒂的答案,或阅读 Douglas Crockford's The Elements of JavaScript Style, part two: Idioms

        4
  •  3
  •   olliej    16 年前

    避免它们的基本原因是 == != 比严格的价格更贵 === !== 接线员。这是因为另外一个大问题,, !=

    一个简单的例子是

    警报({toString:function(){return“1”}==1)

        5
  •  3
  •   savetheclocktower    16 年前

    语义 === !== 几乎总是你想要的 意思是 . 在比较一个基本体与另一个基本体时,需要检查它们是否具有相同的值。将一个对象与另一个对象进行比较时,需要检查它们是否引用了完全相同的对象。

    编辑: 删除了有关比较“虚假”值的错误信息。我只想说 == 操作员无法分辨 null 从…起 undefined 0 从…起 "" [0] 从…起 . 是的,我对最后一件事是认真的。

        6
  •  1
  •   Peter Bailey    16 年前

    嗯,我认为你收到的“建议”可能是出于好意,但不是一个完整的评论。

    JavaScript是动态类型化的,这意味着变量可以动态更改类型(字符串、数字、布尔值),而无需强制转换。如果您这样做,解析器不会抱怨

    var int = 3;    // Is typeof Number
    int = 'haha!';  // is typeof String
    

    但是,这并不是说JavaScript完全不考虑类型。相等和不相等运算符(=和!=)比较计算值,并忽略类型。

    严格等式和严格不等式运算符(==和!==)确实关心类型。因此,在确定返回值之前,他们将比较值和类型。

    在这里阅读更多

    http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.5/guide/expr.html#1010037

        7
  •  0
  •   Andrew Hedges    16 年前

    就个人而言,除了其他人所说的非常合理的理由之外,我只是想知道我所比较的正是我想要的。对我来说,以下两者之间的区别很重要,即使它们都评估为 !myVar :

    false === myVar
    'undefined' === typeof myVar