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

if 语句

if (condition) statement1 else statement2

  • 这里的condition可以是任意表达式,表达式求值后, js会自动将此值(这个值可以不是布尔值) 转换为布尔值

  • 关于这个如何将这个值转换为布尔值遵循以下规则:

    数据类型 转换为true的值 转换为false的值
    Boolean true false
    String 非空字符串 ""
    Number 任何非0的数字值(包括无穷大) 0和NaN
    Object 任何对象 null
    Undefined n/a undefined
    var a = "0";
    if (a) {
        console.log("我是灰太狼")
     }
    else {
        console.log("我是喜洋洋")
    }
    /*输出
    我是灰太狼*/
    

    这里的"0" 不是空字符串,是一个值为0 的字符串

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

    这里的0 是一个值为0 的number ,转换为布尔值时是false.所以执行else里的内容

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

    空白字符串在转换为布尔值时是true,所以输出"hello world"

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

    字符串在转换为布尔值时为FALSE

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

    这里的if ( ) 里的是赋值语句,故为TRUE,且a 的值改变了

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

    if ( ) 里的判断语句是 "相等"判断,number不相等,故为FALSE,只输出1

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

    if ( ) 里的判断语句是 "相等"判断,会进行类型转换式的比较,故也为TRUE

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

    这里是进行全等判断,所以类型和值有一个不相等,即为FALSE


相等 == 判断

相等 == 在比较操作数时通常会进行“强制类型转换”在进行比较

转换规则是尽量往数值上转换(一般体现在两边操作数类型不同时,对象和NaN见下面),具体遵循以下规则:

  1. 其中一个操作数是布尔值的话,将布尔值转换为数值,true为1 , false 为 0

  2. 如果有一个字符串,另一个操作数是数字,将字符串转换为数值,字符串" 2" 转换为 2, 字符串"a" 转换为 NaN

  3. 如果有一个操作数是对象,调用其valueOf()方法(此方法返回对象的字符串、数值或布尔值表示,通常与toString()方法返回值相同),再依照上面所述进行基本类型转换

(各对象valueOf()方法返回类型值)

对象 返回值
Array 返回数组对象本身
Boolean 布尔值
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC
Function 函数本身
Number 数字值
Object 对象本身,这是默认情况
String 字符串值
Math 和 Error 没有 valueOf 方法
  1. null 和 defined 相等

  2. 如果有一个操作数时NaN,则返回false

  3. NaN与NaN是不相等的

  4. 如果操作数均是对象,如果指向同一个对象则相等(指的是保存对象的地址相同的变量),这种 {} == {} 是不相等的。


所以一般是使用 ===来进行判断

你可能感兴趣的:(JavaScript 中 if() 判断和 a==b)