if(condition) VS a == b

if(condition) VS a == b

你真的了解判斷語句嗎?

判斷語句是程序設(shè)計(jì)中最基本的語句,我們無時無刻不在與其產(chǎn)生交集,或許在看到這篇文章的前一秒,你正寫完一個條件判斷以滿足功能需求。但是,有時候碰到一些奇怪的面試題,我們或許會懷疑“我真的了解判斷語句嗎?”。

牛刀小試

  if("hello") {
    console.log("hello");
  }
  if("") {
    console.log("empty);
  }
  if(" ") {
    console.log("blank");
  }
  if("[0]") {
    console.log("array");
  }
  if("0.00") {
    console.log("0.00")
  }

上面的是不是so easy,可能都覺得有些無聊了QAQ,嘿,先別走啊,再看看下面的。

  "" == 0
  " " == 0
  "" == true
  " " == true
  !" " == true
  "hello" == true
  "0" == true
  undefined == null
  {} == true
  [] == true
  var obj = {
    a: 0,
    valueOf: function() {return 1}
  }
  obj == "[object Object]"
  obj == 1
  obj == true

嗯~,好像需要思考了,,,接下來,我們來了解一些判斷的內(nèi)部比較原理。

言歸正傳

對于if(condition)

對于if括號中的表達(dá)式(這里指單個變量),會被強(qiáng)制轉(zhuǎn)化為Boolean類型,轉(zhuǎn)化規(guī)則如下:

類型 結(jié)果
undefined false
null false
Boolean 直接判斷
Number +0、-0、NaN為false,其他為true
String 空字符串為false,其他都為true
Object true
對于x == y類型判斷

結(jié)果映射為下:

x y 結(jié)果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
上表中的toNumber表示強(qiáng)制轉(zhuǎn)化為Number,轉(zhuǎn)化規(guī)則如下:
Type Result
undefined NaN
null 0
Boolean true -> 1,false -> 0
String "abc" -> NaN,"123" -> 123
toPrimitive表示對于Object類型轉(zhuǎn)化規(guī)則,對于Object類型,先嘗試調(diào)用valueOf方法獲取結(jié)果。如果沒有定義,再嘗試調(diào)用toString方法獲取結(jié)果。
了解了這些你就可以任意使用if-else了?哦,不!

look-up表了解一些

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容