????比較兩個(gè)變量是否相等時(shí),有==和===兩種方式银舱。
????==的工作模式是,判斷兩邊的變量是否為同種類型跛梗,如果不是同種類型則需要轉(zhuǎn)變類型寻馏,再比較是否相等。===的工作模式是核偿,判斷兩種類型是否為同種類型操软,如果是同種類型判斷是否相等,不是同種類型就認(rèn)為不相等宪祥。舉例說(shuō)明:
var a = "42";
var b = 42;
a = 42; //true,先將a轉(zhuǎn)換成數(shù)字42聂薪,再比較
????也有人將==比作松散相等(值相等即可)家乘,將===比作絕對(duì)相等(類型和值都相等),===不多說(shuō)什么藏澳,只闡述==仁锯。
一、聲明規(guī)則
? ? 重要的是翔悠,當(dāng)==兩邊類型不同時(shí)业崖,轉(zhuǎn)換規(guī)則是什么。我們都知道蓄愁,通過(guò)typeof()判斷變量類型可能返回六種形式:number,string,boolean,object,undefined
? ? 那么如果==兩邊類型不同双炕,轉(zhuǎn)換規(guī)則如下:一旦一邊有數(shù)字則另一邊試圖轉(zhuǎn)換為數(shù)字,一旦一邊有數(shù)字則另一邊試圖轉(zhuǎn)換為數(shù)字撮抓,凡事布爾都會(huì)轉(zhuǎn)換成數(shù)字妇斤,,null和undefined另外講。下面一點(diǎn)點(diǎn)將來(lái)
>代表轉(zhuǎn)換成的意思
1 == "1"; //true "1">1
1 == new String("1"); //true obj>"1">1
1 == []; // false []>"">0丹拯,不相等
1 == [1]; //true,[1]>"1",>1
1 == [1,2]; //false [1,2]>"1,2">NaN,而NaN和誰(shuí)都不相等
0 == [1,2]; //false?
1 == true; //true? true>1
0 == {};? // false? {}>常規(guī)對(duì)象>NaN,和誰(shuí)都不等
這里涉及到一個(gè)問(wèn)題站超,字符串轉(zhuǎn)數(shù)字時(shí),常規(guī)數(shù)字字符串轉(zhuǎn)成數(shù)字乖酬,非常規(guī)轉(zhuǎn)成NaN死相,如:
Number("123"); // 123
Number("1,2"); // NaN
二、null和undefined
null == undefined ; // true,這個(gè)東西特殊咬像,記住吧
三算撮、關(guān)于是否一定要用===
一直認(rèn)為===準(zhǔn)確度高,效率也會(huì)高县昂,然而會(huì)增加代碼復(fù)雜度钮惠,例如: