前端系统化学习【JS篇】:(四-3)基本数据类型之Boolean篇

208 阅读2分钟

前言

  • 细阅此文章大概需要 7分钟\color{red}{7分钟}左右
  • 本篇中详细讲述\color{red}{详细讲述}了:
    1. Boolean布尔数据类型简述
    2. 其他类型值转换为布尔类型值的方法和各种情况
    3. 在==比较的过程中,数据类型转换的规则
  • 如果有任何问题都可以留言给我,我看到了就会回复,如果我解决不了也可以一起探讨、学习。如果认为有任何错误都还请您不吝赐教,帮我指正,在下万分感谢。希望今后能和大家共同学习、进步。
  • 下一篇会尽快更新,已经写好的文章也会在今后随着理解加深或者加入一些图解而断断续续的进行修改。
  • 如果觉得这篇文章对您有帮助,还请点个赞支持一下,谢谢大家!

Boolean布尔数据类型

只有两个值 true/false

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


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

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

手动转换:

  1. Boolean([val])
  2. !/!!
    • !:取反(先转为布尔,再取反)
    • !!:取反再取反,相当于只转换为布尔<=>Boolean

隐式转换:

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

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

3. 条件判断

  • 如果条件只是一个值,不是==/===/!=/>=/<=...等这些比较,则是要把这个值先转换为布尔值,然后再验证其真假
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
    //
    //对象==布尔 不是类型相同也不是字符串==对象,于是都先转为数字(隐式转换),再进行比较