2 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
js是遵從ECMAScript規(guī)范的,出現(xiàn)上面問題的原因是因?yàn)殛P(guān)系運(yùn)算符會(huì)脅迫類型轉(zhuǎn)換。
首先要明確一點(diǎn),typeof(null)=='object'。然后問題分兩部分回答吧,先說false的三個(gè):
null==0 //falsenull>0 //falsenull<0 //false
在x與y之間使用= =時(shí),會(huì)判斷“如果x為object,y為字符串或數(shù)字”的情況,這時(shí)候會(huì)返回ToPrimitive(x) = =y,也就是ToPrimitive(null)==0,null會(huì)根據(jù)輸入的參數(shù)0(Number)轉(zhuǎn)換為原始值,這時(shí)候是null轉(zhuǎn)化為undefined,>號(hào)與<號(hào)的轉(zhuǎn)換情況也是一樣的,因此出現(xiàn)了false。
undefined==0//falseundefined>0//falseundefined<0//false
true的情況則是null在>=時(shí),通過GetBase和GetPropertyName轉(zhuǎn)換為了0,因此
0>=0//true
這些東西其實(shí)挺糾結(jié)的說,還是得看ECMAScript的規(guī)則。

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
1. 關(guān)系運(yùn)算符 和 相等運(yùn)算符 并個(gè)類別的
2. 關(guān)系運(yùn)算符,在設(shè)計(jì)上,總是需要運(yùn)算元嘗試轉(zhuǎn)為一個(gè)number . 而相等運(yùn)算符在設(shè)計(jì)上,則沒有這方面的考慮
3. 最重要的一點(diǎn), 不要把 拿 a > b , a == b 的結(jié)果 想當(dāng)然的去和 a >= b 建立聯(lián)系. 正確的符合最初設(shè)計(jì)思想的關(guān)系是 a > b 與 a >= b是一組。a == b 和其他相等運(yùn)算符才是一組. 比如
a === b , a != b, a !== b
null > 0 // null 嘗試轉(zhuǎn)型為number , 則為0 . 所以結(jié)果為 false, null >= 0 // null 嘗試轉(zhuǎn)為number ,則為0 , 結(jié)果為 true. null == 0 // null在設(shè)計(jì)上,在此處不嘗試轉(zhuǎn)型. 所以 結(jié)果為false.
添加回答
舉報(bào)