JavaScript 中 if() 判斷和 a==b

if 語(yǔ)句

if (condition) statement1 else statement2

  • 這里的condition可以是任意表達(dá)式,表達(dá)式求值后, js會(huì)自動(dòng)將此值(這個(gè)值可以不是布爾值) 轉(zhuǎn)換為布爾值

  • 關(guān)于這個(gè)如何將這個(gè)值轉(zhuǎn)換為布爾值遵循以下規(guī)則:

    數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
    Boolean true false
    String 非空字符串 ""
    Number 任何非0的數(shù)字值(包括無(wú)窮大) 0和NaN
    Object 任何對(duì)象 null
    Undefined n/a undefined
    var a = "0";
    if (a) {
        console.log("我是灰太狼")
     }
    else {
        console.log("我是喜洋洋")
    }
    /*輸出
    我是灰太狼*/
    

    這里的"0" 不是空字符串,是一個(gè)值為0 的字符串

    var a = 0;
    if (a) {
        console.log("我是灰太狼")
    }
    else {
        console.log("我是喜洋洋")
    } /*輸出
    我是喜洋洋*/
    

    這里的0 是一個(gè)值為0 的number ,轉(zhuǎn)換為布爾值時(shí)是false.所以執(zhí)行else里的內(nèi)容

      if(" "){
         console.log("hello world")
      }
      else {
         console.log("haha")
      }
      
      /* 輸出
      "hello world"
      */
      
    

    空白字符串在轉(zhuǎn)換為布爾值時(shí)是true,所以輸出"hello world"

    if(""){
       console.log("hello world")
    }
    else {
       console.log("haha")
    }
    
    /* 輸出
    haha
    */
    
    

    字符串在轉(zhuǎn)換為布爾值時(shí)為FALSE

    var a = 1;
    if(a = 2){
        console.log("hello world")
    }
    console.log(a) 
    
    /* 輸出
    "hello world"
    2 */
    

    這里的if ( ) 里的是賦值語(yǔ)句,故為TRUE,且a 的值改變了

    var a = 1;
    if(a == 2){
        console.log("hello world")
    }
    console.log(a)
    
    /* 輸出
    1   
    */
    

    if ( ) 里的判斷語(yǔ)句是 "相等"判斷,number不相等,故為FALSE,只輸出1

    var a = "2";
    if(a == 2){
        console.log("hello world")
    }
    console.log(a)
    
    /* 輸出
    "hello world"
    "2"   
    */
    

    if ( ) 里的判斷語(yǔ)句是 "相等"判斷,會(huì)進(jìn)行類型轉(zhuǎn)換式的比較,故也為TRUE

    var a = "2";
    if(a === 2){
        console.log("hello world")
    }
    console.log(a)
    
    /* 
    "2"
    */
    

    這里是進(jìn)行全等判斷,所以類型和值有一個(gè)不相等,即為FALSE


相等 == 判斷

相等 == 在比較操作數(shù)時(shí)通常會(huì)進(jìn)行“強(qiáng)制類型轉(zhuǎn)換”在進(jìn)行比較

轉(zhuǎn)換規(guī)則是盡量往數(shù)值上轉(zhuǎn)換(一般體現(xiàn)在兩邊操作數(shù)類型不同時(shí),對(duì)象和NaN見(jiàn)下面),具體遵循以下規(guī)則:

  1. 其中一個(gè)操作數(shù)是布爾值的話,將布爾值轉(zhuǎn)換為數(shù)值,true為1 , false 為 0

  2. 如果有一個(gè)字符串,另一個(gè)操作數(shù)是數(shù)字,將字符串轉(zhuǎn)換為數(shù)值,字符串" 2" 轉(zhuǎn)換為 2, 字符串"a" 轉(zhuǎn)換為 NaN

  3. 如果有一個(gè)操作數(shù)是對(duì)象,調(diào)用其valueOf()方法(此方法返回對(duì)象的字符串、數(shù)值或布爾值表示,通常與toString()方法返回值相同),再依照上面所述進(jìn)行基本類型轉(zhuǎn)換

(各對(duì)象valueOf()方法返回類型值)

對(duì)象 返回值
Array 返回?cái)?shù)組對(duì)象本身
Boolean 布爾值
Date 存儲(chǔ)的時(shí)間是從 1970 年 1 月 1 日午夜開(kāi)始計(jì)的毫秒數(shù) UTC
Function 函數(shù)本身
Number 數(shù)字值
Object 對(duì)象本身,這是默認(rèn)情況
String 字符串值
Math 和 Error 沒(méi)有 valueOf 方法
  1. null 和 defined 相等

  2. 如果有一個(gè)操作數(shù)時(shí)NaN,則返回false

  3. NaN與NaN是不相等的

  4. 如果操作數(shù)均是對(duì)象,如果指向同一個(gè)對(duì)象則相等(指的是保存對(duì)象的地址相同的變量),這種 {} == {} 是不相等的。


所以一般是使用 ===來(lái)進(jìn)行判斷

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

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,533評(píng)論 0 13
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語(yǔ)言,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等;大學(xué)畢...
    oceanfive閱讀 3,375評(píng)論 0 7
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評(píng)論 19 139
  • 從加入特種兵團(tuán)開(kāi)始,整個(gè)人一直處于高度緊張狀態(tài),剛開(kāi)始我是很糾結(jié)的,我不知道自己是否真的合適參加這次的培訓(xùn),盡管我...
    可可118閱讀 236評(píng)論 0 0
  • 我不知道人生是什么,我不懂得愛(ài)情是什么,我也不知道人在這一生需要付出什么。 這一年,我已24,我不知剩下多少歲月去...
    小若丶閱讀 216評(píng)論 0 2

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