zoukankan      html  css  js  c++  java
  • JavaScript中 ==(等于) 与 === (恒等于) 的区别

    一直以来没去注意这个恒等于(三个等号:===)的运算符。后来实际工作中遇到,就想了解一下这个等于和恒等于到底有什么区别。

             JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。注意0的相等运算,例如:

     

     
    1. ""           ==   "0"           // false  
    2. 0            ==   ""            // true  
    3. 0            ==   "0"           // true  
    4. false        ==   "false"       // false  
    5. false        ==   "0"           // true  
    6. false        ==   undefined     // false  
    7. false        ==   null          // false  
    8. null         ==   undefined     // true  
    9. " \t\r\n"    ==   0             // true  

     而恒等于不像普通的等于操作符,不会进行强制类型转换。这样的话上述的结果就不太相同了:

     

     
    1. ""           ===   "0"           // false  
    2. 0            ===   ""            // false  
    3. 0            ===   "0"           // false  
    4. false        ===   "false"       // false  
    5. false        ===   "0"           // false  
    6. false        ===   undefined     // false  
    7. false        ===   null          // false  
    8. null         ===   undefined     // false  
    9. " \t\r\n"    ===   0             // false  

     而对于对象,当用恒等于的时候,用于判断是否是同一个对象而不是单纯的判断值是否相等。所以,以后要注意了。判断的时候尽量还是使用恒等于,这样不用进行强制转换比较

     

    一言以蔽之:==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。

    ===表示恒等于,比较的两边要绝对的相同

    alert(0 == ""); // true

    alert(0 == false); // true

    alert("" == false); // true

     

    alert(0 === ""); // false

    alert(0 === false); // false

    alert("" === false); // false

    先说 ===,这个比较简单,具体比较规则如下:

    1、如果类型不同,就[不相等] 

    2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 

    3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 

    4、如果两个值都是true,或者都是false,那么[相等]。 

    5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 

    6、如果两个值都是null,或者都是undefined,那么[相等]。

    再说 ==,具体比较规则如下:

    1、如果两个值类型相同,进行 === 比较,比较规则同上 

    2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 

    a、如果一个是null、一个是undefined,那么[相等]。 

    b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 

    c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 

    d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我也不大懂) 

    e、任何其他组合(array数组等),都[不相等]。

    当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。

  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/mguo/p/2981063.html
Copyright © 2011-2022 走看看