[JS]【二】---基本数据类型之【Boolean、null、undefined篇】

543 阅读3分钟

Boolean布尔数据类型

只有两个值 true/false

将其它类型的数据转换为布尔类型

【注意】:只有0、NaN、""、null、undefined五个值转换为false,其余都转换为true(而且没有特殊情况)!!!

两类方法:手动转换和隐式转换

手动转换

  1. Boolean([val])

    console.log(Boolean(0));//=>false
    console.log(Boolean(''));//=>false
    console.log(Boolean(' '));//=>true
    console.log(Boolean(null));//=>false
    console.log(Boolean(undefined));//=>false
    console.log(Boolean(NaN));//=>false
    console.log(Boolean([]));//=>true
    console.log(Boolean([12]));//=>true
    console.log(Boolean(-1));//=>true
    
  2. !/!!

    • !:取反(先转为布尔,再取反)

    • !!:取反再取反,相当于只转换为布尔<=>Boolean

      console.log(!1);//=>false
      console.log(!!1);//=>true
      

隐式转换

条件判断

  • 如果条件只是一个值,不是==/===/!=/>=/<=...等这些比较,则是要把这个值先转换为布尔值,然后再验证其真假

    if (1) {
        console.log('haha')
    }
    if('3px'+3){//=> '3px+3' => TRUE
        console.log('haha')
    }
    if('3px'-3){//=> NaN-3 => NaN =>FALSE
        console.log('haha')
    }
    

在==比较的过程中,数据类型转换的规则

  • 【类型一样时的几个特殊点】

    • {}=={}:false (对象比较的是堆内存的地址)
    • []==[]:false (数组也是一个对象,Array的实例)
    • NaN==NaN:false (NaN的特点)
  • 【类型不一样的转换规则】

    1. null == undefined 结果是true,但是转换成 ===【null===undefined(全等于)】结果就是false (因为对象类型不一致),剩下null/undefined和其他任何数据类型值都不相等
    	console.log(null == undefined) //=>true
    	//都转换为数字0=>true
       console.log(null === undefined) //=>false
    复制代码
    
    1. 字符串==对象,会把对象转换为字符串,再进行比较
    2. 除了这两种情况外,如果==两边数据类型不一致,都是需要转换为数字再进行比较
    //==练习题
    console.log([]==false);//true
    //空数组对象与布尔值进行比较,两边数据类型不一致,要转换为数字,则对象先判断原始值,若无则先转为字符串,在转换为数字,
    //[]->""->0//空字符串对应为0
    //false->0 
    //
    console.log(![]==false)//false
    //[]->""->0  !0->1 自身的类型转换优先级高
    //false->0
    //
    //对象==布尔 不是类型相同也不是字符串==对象,于是都先转为数字(隐式转换),再进行比较

null和undefined

null--代表空对象指针,

  • 虽然代表没有,但是是有一个代表"空"的对象存在的,所以转换为Number应为0】undefined转换为NaN
  • null表示"没有对象",即该处不应该有值。

undefined代表未定义,

  • 未定义代表没有赋值,没有赋值就是"没有值","没有值"转换为Number的值就是NaN
  • undefined表示"缺少值",就是此处应该有一个值,但是还没有定义

null和undefined的常见用法

  • 在现今的使用当中,null和undefined基本是同义的,只有一些理解上的的差别。
  1. ***null表示"没有对象",即该处不应该有值。***常见为:
  1. 作为函数的参数,表示该函数的参数不是对象。
	fn=val=>console.log(val);
    fn(null);
2. 作为对象原型链的终点。
	console.log(Object.prototype.__proto__);
    //null

  1. undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。 常见为:
    1. 变量被声明了,但没有赋值时,就等于undefined。
    2. 定义函数时设置了形参,但是调用函数时没有传递实参,为传递的参数值等于undefined。
    3. 对象没有赋值的属性,该属性的值为undefined。
    4. 函数没有返回值时,默认返回undefined。
 	let a;
     console.log(a); // undefined
 		//
     let fn = function fn(val){
     	console.log(val)
         }
     fn() // undefined
 		//
     let  obj = new Object();
     console.log(obj.a); // undefined
 		//
     let b = fn();
     console.log(b); // undefined