zoukankan      html  css  js  c++  java
  • JS === 与 ==

     

    严格相等运算符(===)的行为与抽象相等运算符(==)相同,不同之处在于未进行任何类型转换,并且类型必须相同才能被视为相等。

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

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

    引用Douglas Crockford出色的JavaScript:The Good Parts

    JavaScript有两组相等运算符:===!==,以及它们的邪恶孪生子==!=优秀的产品以您期望的方式工作。如果两个操作数具有相同的类型并具有相同的值,则===产生true!==产生false当操作数是相同类型时,邪恶双胞胎会做正确的事情,但是如果操作数是不同类型,则它们会试图强制值。他们所遵循的规则是复杂而难忘的。这些是一些有趣的情况:

    '' == '0'           // false
    0 == ''             // true
    0 == '0'            // true
    
    false == 'false'    // false
    false == '0'        // true
    
    false == undefined  // false
    false == null       // false
    null == undefined   // true
    
    ' 	
     ' == 0     // true
    

    平等比较表

    传递性的缺乏令人震惊。我的建议是不要使用邪恶的双胞胎。相反,请始终使用===!==刚刚显示的所有比较都是false===操作员进行的。


     关于对象的回答中提出了一个很好的观点。对于对象,=====彼此一致行动(除非在特殊情况下)。

    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构造函数从字符串文字中创建字符串对象。

  • 相关阅读:
    SQL Server 连接字符串和身份验证
    常用jQuery选择器总结【转】
    javascript深入理解js闭包[转]
    JS鼠标事件大全
    JS 获取各个宽度和高度
    移动设备屏幕缩放
    面向对象学习【类-匿名类】
    Java学习笔记之log4j与commons-logging<转>
    Java数据库连接——JDBC基础知识(操作数据库:增删改查)【转】
    静态方法和非静态方法的区别
  • 原文地址:https://www.cnblogs.com/WLCYSYS/p/14023677.html
Copyright © 2011-2022 走看看