GCT1015
2023-04-14 19:15:37
null==0 //falsenull>0 //falsenull<0 //falsenull>=0 //true
2 回答

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

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
1. 關系運算符 和 相等運算符 并個類別的
2. 關系運算符,在設計上,總是需要運算元嘗試轉為一個number . 而相等運算符在設計上,則沒有這方面的考慮
3. 最重要的一點, 不要把 拿 a > b , a == b 的結果 想當然的去和 a >= b 建立聯系. 正確的符合最初設計思想的關系是 a > b 與 a >= b是一組。a == b 和其他相等運算符才是一組. 比如
a === b , a != b, a !== b
null > 0 // null 嘗試轉型為number , 則為0 . 所以結果為 false, null >= 0 // null 嘗試轉為number ,則為0 , 結果為 true. null == 0 // null在設計上,在此處不嘗試轉型. 所以 結果為false.
添加回答
舉報
0/150
提交
取消