Javascript學(xué)習(xí)筆記之相等符號(hào)與嚴(yán)格相等符號(hào)
Javascript 有兩種方法來判斷兩種值是否相等。
相等符號(hào)
相等符號(hào)由兩個(gè)等號(hào)組成: ==
Javascript 是弱類型語言。這就意味著相等符號(hào)為了比較兩個(gè)值將會(huì)強(qiáng)制轉(zhuǎn)換類型。
"" == "0" // false
0 == "" // true
0 == "0" // true
false == "false" // false
false == "0" // true
false == undefined // false
false == null // false
null == undefined // true
" \t\r\n" == 0 // true
上面的代碼展示了類型轉(zhuǎn)換的結(jié)果,因此我們知道使用相等符號(hào) == 是個(gè)不好的編程習(xí)慣。由于 Javascript 中復(fù)雜的類型轉(zhuǎn)換機(jī)制,將會(huì)使得由此產(chǎn)生的錯(cuò)誤變得難以追蹤。
此外,類型的強(qiáng)制轉(zhuǎn)換會(huì)對(duì)性能也造成一定的影響,例如,當(dāng)一個(gè)字符串與數(shù)字進(jìn)行比較時(shí),會(huì)被強(qiáng)制轉(zhuǎn)換為數(shù)字。
嚴(yán)格相等符號(hào)
嚴(yán)格相等符號(hào)由三個(gè)等號(hào)組成: ===
它跟相等符號(hào)的操作相似,但是嚴(yán)格相等符號(hào)不會(huì)做強(qiáng)制類型轉(zhuǎn)換的操作。
"" === "0" // false
0 === "" // false
0 === "0" // false
false === "false" // false
false === "0" // false
false === undefined // false
false === null // false
null === undefined // false
" \t\r\n" === 0 // false
上面的代碼使得代碼更加清晰,如果兩個(gè)值的類型不同則直接返回 false,這也會(huì)使得性能得到提升。
比較對(duì)象
盡管 == 和 === 被稱為相等符號(hào),但是當(dāng)比較的兩個(gè)值中有一個(gè)類型是對(duì)象時(shí),表現(xiàn)將大不相同。
{} === {}; // false
new String('foo') === 'foo'; // false
new Number(10) === 10; // false
var foo = {};
foo === foo; // true
在這兒,不再僅僅是比較兩個(gè)值是否相等,它將判斷兩個(gè)值是否引用同一個(gè)對(duì)象實(shí)例,這個(gè)行為比較像 C 中的指針。
總結(jié)
這里強(qiáng)烈建議只使用嚴(yán)格相等符號(hào) ===。如果我們需要做類型轉(zhuǎn)換,可以在比較前先做顯式的類型轉(zhuǎn)換,而不是靠 Javascript 本身復(fù)雜的強(qiáng)制轉(zhuǎn)換方法。
相關(guān)文章
舉例說明JavaScript中的實(shí)例對(duì)象與原型對(duì)象
這篇文章主要介紹了JavaScript中的實(shí)例對(duì)象與原型對(duì)象,針對(duì)constructor屬性和prototype屬性展開來講,需要的朋友可以參考下2016-03-03
設(shè)計(jì)模式中的組合模式在JavaScript程序構(gòu)建中的使用
組合模式一般是將一系列類似的小對(duì)象組合成大的對(duì)象,由這個(gè)大對(duì)象提供接口來對(duì)里面的小對(duì)象進(jìn)行操作,下買呢我們來詳細(xì)看一下設(shè)計(jì)模式中的組合模式在JavaScript程序構(gòu)建中的使用2016-05-05
JavaScript substr() 字符串截取函數(shù)使用詳解
substr() 方法可在字符串中抽取從 start 下標(biāo)開始的指定數(shù)目的字符,文中配有大量實(shí)例代碼2013-04-04
THREE.JS入門教程(4)創(chuàng)建粒子系統(tǒng)
Three.js是一個(gè)偉大的開源WebGL庫,WebGL允許JavaScript操作GPU,在瀏覽器端實(shí)現(xiàn)真正意義的3D本文將介紹創(chuàng)建一個(gè)粒子系統(tǒng)/風(fēng)格/引入物理等等,感興趣的朋友可以了解下哦,希望本文對(duì)你有所幫助2013-01-01
在JavaScript中操作時(shí)間之getMonth()方法的使用
這篇文章主要介紹了在JavaScript中操作時(shí)間之getMonth()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06

