js中的等值運算符(抽象相等==與嚴格相等===的區別)


js中的等值運算符

js中的相等分為抽象相等和嚴格相等,他們有什么區別呢。

在說具體算法前,先提下JS數據類型,JS數據類型分為6類:Undefined Null String Number Boolean Object.在這里我們用Type(x)表示x的數據類型

1,抽象相等==
x==y的算法過程如下:

    1,Type(x)與Type(y)相同:
        如果Type(x)為Undefined或Null,則返回true,即:undefined==undefined; null==null返回true
        如果Type(x)為Number,如果x或y為NaN,返回false,即:NaN==NaN為false;x與y數值相等或-0與+0均返回true,否則返回false
        如果Type(x)為String,則x和y對應位置的字符完全一樣才返回true,否則返回false
        如果Type(x)為Boolean,則相同值返回true,否則false
        如果Type(x)為Object,則相同引用返回true,否則false,看下面例子:
            var a={m:1}
            var b={m:1}
            a==b
            結果為false,因為a,b不是相同引用,再看:
            var a={m:1}
            b=a
            a==b
            結果為true,因為他們是引用同一個對象
    2,Type(x)為Undefined,Type(y)為Null,返回true,即undefined==null為true
    3, Type(x)為String,Type(y)為Number,則將x轉換為Number,然后再比較,例:
            1==“1”
            結果為true,因為將"1"轉換為Number后為1
    4,Type(x)為Boolean,Type(y)為Number,則將x轉換為Number再比較,例
            true==1;
            false==0;
            結果均為true
    5,Type(x)為String或Number,Type(y)為Object,則將y轉換為基本值,例子:
            1==new String("1")
            "2"==new Number(2)
            結果均為true
    6,返回false
2,嚴格相等===
1,如果 Type(x) 與 Type(y) 的結果不一致,返回 false,即只要類型不一樣,則返回false,例子:
     1===“1”   false
     undefined===null  false
2,如果Type(x)是Number,如果x或y為NaN,返回false,即:NaN===NaN為false;x與y數值相等或-0與+0均返回true,否則返回false
3,如果 Type(x) 結果為 Undefined,返回 true
  如果 Type(x) 結果為 Null,返回 true
  如果Type(x)為String,則x和y對應位置的字符完全一樣才返回true,否則返回false
  如果Type(x)為Boolean,則相同值返回true,否則false
  如果Type(x)為Object,則相同引用返回true,否則false


總結:
嚴格等與抽象等的區別在於,嚴格等首先要求類型一樣,在比較過程中不執行類型轉換,抽象等對比較對象的類型會執行轉換,再轉換為同一類型后再進行值得比較。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM