Boolean布尔数据类型
只有两个值 true/false
将其它类型的数据转换为布尔类型
【注意】:只有0、NaN、""、null、undefined五个值转换为false,其余都转换为true(而且没有特殊情况)!!!
两类方法:手动转换和隐式转换
手动转换
-
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 -
!/!!
-
!:取反(先转为布尔,再取反)
-
!!:取反再取反,相当于只转换为布尔<=>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的特点)
【类型不一样的转换规则】
- null == undefined 结果是true,但是转换成 ===【null===undefined(全等于)】结果就是false (因为对象类型不一致),剩下null/undefined和其他任何数据类型值都不相等
console.log(null == undefined) //=>true //都转换为数字0=>true console.log(null === undefined) //=>false 复制代码
- 字符串==对象,会把对象转换为字符串,再进行比较
- 除了这两种情况外,如果==两边数据类型不一致,都是需要转换为数字再进行比较
//==练习题
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基本是同义的,只有一些理解上的的差别。
- ***null表示"没有对象",即该处不应该有值。***常见为:
- 作为函数的参数,表示该函数的参数不是对象。
fn=val=>console.log(val);
fn(null);
2. 作为对象原型链的终点。
console.log(Object.prototype.__proto__);
//null
- undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。 常见为:
- 变量被声明了,但没有赋值时,就等于undefined。
- 定义函数时设置了形参,但是调用函数时没有传递实参,为传递的参数值等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 函数没有返回值时,默认返回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