? ? ? ?年后第一天開工,在刷面試題的時候看到了這么一道題宋渔,null == 0居然是false州疾,之前的常識不是,null皇拣、undefined严蓖、0、-0氧急、NaN颗胡、‘' 這幾個值會遇到==操作符會轉(zhuǎn)換成false嗎, 然后百度了一下了解了null在==比較不進(jìn)行類型轉(zhuǎn)換吩坝,然后在控制臺隨便嘗試的時候發(fā)現(xiàn)null == undefined居然是true毒姨,不是不轉(zhuǎn)換嗎,這這這真是毀三觀啊钾恢,在我百思不得其解的時候我翻開了那本神奇的紅皮書手素,澤拉斯大神竟然早就把這些寫在書里了扑毡,試問我也是看過幾遍的人底桂,但是每次都會把前三章選擇性的直接忽略坝茎,以后真的要戒驕戒躁踏踏實實的學(xué)好基礎(chǔ)知識啊,下面我就詳細(xì)的分析一下這兩個操作符的使用規(guī)則:
? ? ? 1.如果等號兩邊有布爾值疹瘦,先將布爾值轉(zhuǎn)成數(shù)字(true轉(zhuǎn)成1,false轉(zhuǎn)成0)巡球,在進(jìn)行比較言沐。
? ? ? 例:false == 0邓嘹;會將false先轉(zhuǎn)換為數(shù)字0,再與0作比較
? ? ? ? ? ? ? true == 1险胰;會將true先轉(zhuǎn)換為數(shù)字1汹押,再與1作比較
? ? ? ? ? ? ? 因此 false == 1;//false? ? true==10起便;//false
2.如果一個是字符串一個是數(shù)值棚贾,現(xiàn)將字符串轉(zhuǎn)成數(shù)值在進(jìn)行比較。
? ? ? ? 例:1=='1'榆综;//true? ? ?
? ? ? ? ? ? ? ? 2=='2'妙痹;//true?
? ? ? ? ? ? ? ? 1=='2';//false
? ? ? ? ? ? ? ? ''==0鼻疮;//true 這里需要注意的是空字符串會直接轉(zhuǎn)成數(shù)字0
? ? ? ? ? ? ? ? //結(jié)合第一條和第二條就能得出:false =='0'//true
3.如果有對象怯伊,先調(diào)用對象的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疗涉,如果兩個值都為NaN拿霉,返回false,也就是說NaN不等于本身咱扣。
7.如果兩個操作數(shù)都為對象绽淘,比較的是他們是否指向同一個對象。對象比較的是他們的引用而不是值闹伪。