这个问题的来源是,我的项目需求中出现了一个问题,是在判断那女的是时候,后台是根据0和1来判断的,所以我再前端判断的时候就出现问题了,!0的时候等于true了,所以仔细的去看了看关于这方面的东西,差缺不漏。

Boolean类型介绍:

  • 在boolean中有六种返回的是false:
  • Boolean(’’) //中间不要有空格,返回的是false;
  • Boolean(undefined) //返回的是false;
  • Boolean(Null) //返回的是false;
  • Boolean(0) //返回的是false;
  • Boolean(NAN)//返回的是false;
  • Boolean(flase) //返回的是false;
  • 在boolean中其他返回true:
  • Boolean(1) //返回的是true;
  • Boolean([]) // 返回的是true;
  • Boolean({}) // 返回的是true;
  • Boolean(Infinity) //返回的是true;
  • Boolean(‘任意字符串’) //返回的是true;
总结:除了以上为false的任意的非空字符串和任意数字,它的Boolean返回的是都是true。

Boolean类型的隐式转换:

  • 在boolean与其他类型比较:
注意:当我们字符串和布尔类型的比较的时候,都会转成Number再比较
  • console.log(0 == false) //0本来就是数字,false转换为数字就是0 ,所以返回的是true;
  • console.log(1 == true) // 1本来也是数组,true转换为数字的就是1,所以返回的是true;
  • console.log(‘0’ == false) // ‘0’这是字符串,那么需要转换成数字进行比较,转换为Number类型的时候就是0,而false转换成Number类型也是0,所以返回的是true;
  • console.log(‘1’ == true) '1’这是字符串,那么同上需要转换成数字进行比较,转换为Number的时候就是1,而true转换成数字类型的时候就是1,1==1所以返回的是true;
  • console.log(‘false’ == false) 这是字符串‘false’,转换成数字是一个NaN,所以返回的是false(任意的字符与布尔类型的比较都是false);
  • console.log(‘true’ == true) 这是字符串‘true’,转换成数字是一个NaN,所以返回的是false(任意的字符与布尔类型的比较都是true);
  • console.log([] == false) 这是一个空数组,转换成数字是0,false转换成数字是0,所以0 == 0 ,返回的值是true
  • console.log([] == true) 转换成数字是0,true转换成数字是1,所以转换成数字0==1,返回值是false;
  • console.log({} == true) 这个一个空的对象,转换成数字类型是NAN,NAN==1,所以返回false;
总结:数字0和1,字符串‘0’和‘1’转换成Number类型的值,都是0和1,布尔类型的转换成数字也是0和1,字符串除了'0'和‘1’外,转换成数字都是NAN,所以没有办法比较,就是说false,而[]转换成Number是0,所以也可以比较,空对象转换成Number是NAN,所以没有办法比较。