? ? ? ?年后第一天開工,在刷面試題的時(shí)候看到了這么一道題,null == 0居然是false,之前的常識(shí)不是,null、undefined、0、-0、NaN、‘' 這幾個(gè)值會(huì)遇到==操作符會(huì)轉(zhuǎn)換成false嗎, 然后百度了一下了解了null在==比較不進(jìn)行類型轉(zhuǎn)換,然后在控制臺(tái)隨便嘗試的時(shí)候發(fā)現(xiàn)null == undefined居然是true,不是不轉(zhuǎn)換嗎,這這這真是毀三觀啊,在我百思不得其解的時(shí)候我翻開了那本神奇的紅皮書,澤拉斯大神竟然早就把這些寫在書里了,試問我也是看過幾遍的人,但是每次都會(huì)把前三章選擇性的直接忽略,以后真的要戒驕戒躁踏踏實(shí)實(shí)的學(xué)好基礎(chǔ)知識(shí)啊,下面我就詳細(xì)的分析一下這兩個(gè)操作符的使用規(guī)則:
? ? ? 1.如果等號(hào)兩邊有布爾值,先將布爾值轉(zhuǎn)成數(shù)字(true轉(zhuǎn)成1,false轉(zhuǎn)成0),在進(jìn)行比較。
? ? ? 例:false == 0;會(huì)將false先轉(zhuǎn)換為數(shù)字0,再與0作比較
? ? ? ? ? ? ? true == 1;會(huì)將true先轉(zhuǎn)換為數(shù)字1,再與1作比較
? ? ? ? ? ? ? 因此 false == 1;//false? ? true==10;//false
2.如果一個(gè)是字符串一個(gè)是數(shù)值,現(xiàn)將字符串轉(zhuǎn)成數(shù)值在進(jìn)行比較。
? ? ? ? 例:1=='1';//true? ? ?
? ? ? ? ? ? ? ? 2=='2';//true?
? ? ? ? ? ? ? ? 1=='2';//false
? ? ? ? ? ? ? ? ''==0;//true 這里需要注意的是空字符串會(huì)直接轉(zhuǎn)成數(shù)字0
? ? ? ? ? ? ? ? //結(jié)合第一條和第二條就能得出:false =='0'//true
3.如果有對(duì)象,先調(diào)用對(duì)象的valueof()方法,再作為基本類型進(jìn)行比較。
4.null和undefined是相等的。undefined==null //這一條就是我上面所困惑的問題
5.如果比較雙方有null和undefined,不能將其轉(zhuǎn)換為其他值。
? ? ? ? ? ? 這條也就表明除了他們倆自身相比較,其他的任何值與undefined,null做==比較返回值都是false,比如:
? ? ? ? ? ? null == false//false? ? undefined == 0//false?
6.如果有NaN,相等操作符返回false,不相等操作符返回true,如果兩個(gè)值都為NaN,返回false,也就是說NaN不等于本身。
7.如果兩個(gè)操作數(shù)都為對(duì)象,比較的是他們是否指向同一個(gè)對(duì)象。對(duì)象比較的是他們的引用而不是值。
