亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么`null> = 0 && null <= 0`但不是`null == 0`?

為什么`null> = 0 && null <= 0`但不是`null == 0`?

素胚勾勒不出你 2019-08-26 18:44:53
為什么`null> = 0 && null <= 0`但不是`null == 0`?我必須編寫一個例程,如果變量的類型是number,則將變量的值增加1,如果不是,則將變量賦值給0,其中變量最初為null或undefined。第一個實現是v >= 0 ? v += 1 : v = 0因為我認為任何不是數字都會使算術表達式為false,但是由于null >= 0被評估為true ,所以它是錯誤的。然后我學會了null類似于0的行為,并且以下表達式都被評估為true。null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1當然,null不是0. null == 0被評估為假。這使得看似同義的表達是(v >= 0 && v <= 0) === (v == 0)錯誤的。為什么它null像0,雖然它實際上不是0?
查看完整描述

4 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

你真正的問題似乎是:

為什么:

null >= 0; // true

但:

null == 0; // false

真正發生的是,大于或等于的Operator (>=)執行類型強制(ToPrimitive),具有提示類型Number,實際上所有關系運算符都具有此行為。

nullEquals Operator==)以特殊方式處理。在簡短的,它只強制轉換undefined

null == null; // truenull == undefined; // true

值,例如false'','0',和[]受數字類型強制,它們都強迫到零。

您可以在抽象等式比較算法抽象關系比較算法中看到此過程的內部細節。

綜上所述:

  • 關系比較:如果兩個值都不是類型String,ToNumber則同時調用它們。這與+在前面添加a相同,對于null強制執行0

  • 平等比較:只調用ToNumber字符串,數字和布爾值。


查看完整回答
反對 回復 2019-08-26
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

我想擴展這個問題,以進一步提高問題的可見性:


null >= 0; //true

null <= 0; //true

null == 0; //false

null > 0;  //false

null < 0;  //false

這沒有任何意義。像人類語言一樣,這些東西需要用心學習。


查看完整回答
反對 回復 2019-08-26
?
千萬里不及你

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 !


查看完整回答
反對 回復 2019-08-26
  • 4 回答
  • 0 關注
  • 1223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號