首页  >  问答  >  正文

JavaScript 比较中应使用哪个等于运算符(== 与 ===)?

<p>我正在使用 JSLint 来浏览 JavaScript,它返回许多建议,将 <code>==</code> (两个等号)替换为 <code>===</code> (三个等号)在执行诸如在 <code>if</code> 语句内比较 <code>idSele_UNVEHtype.value.length == 0</code> 等操作时。</p> <p>将 <code>==</code> 替换为 <code>===</code> 是否有性能优势? </p> <p>任何性能改进都会受到欢迎,因为存在许多比较运算符。</p> <p>如果不进行类型转换,是否会比 <code>==</code> 获得性能提升?</p>
P粉023650014P粉023650014444 天前567

全部回复(2)我来回复

  • P粉336536706

    P粉3365367062023-08-24 09:01:58

    使用==运算符(相等

    true == 1; //true, because 'true' is converted to 1 and then compared
    "2" == 2;  //true, because "2" is converted to 2 and then compared

    使用===运算符(Identity

    true === 1; //false
    "2" === 2;  //false

    这是因为相等运算符 == 会进行类型强制转换,这意味着解释器会在比较之前隐式尝试转换值。

    另一方面,恒等运算符 === 不会进行类型强制,因此在比较时不会转换值。

    回复
    0
  • P粉178894235

    P粉1788942352023-08-24 00:58:02

    严格相等运算符 (===) 的行为与抽象相等运算符 (==) 相同,只是不进行类型转换,并且类型必须是相同的被认为是平等的。

    参考:JavaScript 教程:比较运算符

    == 运算符将在进行任何必要的类型转换后比较是否相等。 === 运算符不会进行转换,因此如果两个值不是同一类型,=== 将简单地返回 。两者都同样快。

    引用 Douglas Crockford 的精彩JavaScript:好的部分,


    更新

    @Casebash 在评论和@Phillipe Laybaert 的 关于对象的答案。对于对象,===== 彼此行为一致(特殊情况除外)。

    var a = [1,2,3];
    var b = [1,2,3];
    
    var c = { x: 1, y: 2 };
    var d = { x: 1, y: 2 };
    
    var e = "text";
    var f = "te" + "xt";
    
    a == b            // false
    a === b           // false
    
    c == d            // false
    c === d           // false
    
    e == f            // true
    e === f           // true

    特殊情况是当您将一个基元与一个计算结果为相同基元的对象进行比较时,由于其 toStringvalueOf 方法。例如,考虑将字符串基元与使用 String 构造函数创建的字符串对象进行比较。

    "abc" == new String("abc")    // true
    "abc" === new String("abc")   // false

    这里 == 运算符检查两个对象的值并返回 true,但是 === 看到它们类型不同并返回 false。哪一个是正确的?这实际上取决于您要比较的内容。我的建议是完全绕过这个问题,只是不要使用 String 构造函数从字符串文字创建字符串对象。

    参考
    https://262.ecma-international.org/5.1/#sec-11.9 .3

    回复
    0
  • 取消回复