4 回答
TA貢獻1816條經驗 獲得超4個贊
你真正的問題似乎是:
為什么:
null >= 0; // true
但:
null == 0; // false
真正發生的是,大于或等于的Operator (>=)執行類型強制(ToPrimitive),具有提示類型Number,實際上所有關系運算符都具有此行為。
null由Equals Operator(==)以特殊方式處理。在簡短的,它只強制轉換到undefined:
null == null; // truenull == undefined; // true
值,例如false,'','0',和[]受數字類型強制,它們都強迫到零。
您可以在抽象等式比較算法和抽象關系比較算法中看到此過程的內部細節。
綜上所述:
關系比較:如果兩個值都不是類型String,
ToNumber則同時調用它們。這與+在前面添加a相同,對于null強制執行0。平等比較:只調用
ToNumber字符串,數字和布爾值。
TA貢獻1936條經驗 獲得超7個贊
我想擴展這個問題,以進一步提高問題的可見性:
null >= 0; //true
null <= 0; //true
null == 0; //false
null > 0; //false
null < 0; //false
這沒有任何意義。像人類語言一樣,這些東西需要用心學習。
TA貢獻1784條經驗 獲得超9個贊
我有同樣的問題 !!。目前我唯一的解決方案是分開。
var a = null;
var b = undefined;
if (a===0||a>0){ } //return false !work!
if (b===0||b>0){ } //return false !work!
//but
if (a>=0){ } //return true !
添加回答
舉報
