是true还是false呢?

古来圣贤皆寂寞 惟有【努】者留其名 ---【努】原文:饮  

先总结一个小知识点:0、null、NaN、undefined、"" 转成布尔值为false 其他则一律返回true

1、首先明白一点:初始化后的数组,即使是空数组,也是一个object 当然非空数组肯定是一个object

  console.log(typeof [])//object
  console.log(typeof(new Array()))//object
2、既然是对象,用于判断条件就会转成true
 if([]){
    console.log(1)//1 可以打印出来
  }
3、但是将[]与布尔值比较却是false
  []==false //true
  Boolean([])//true
4、但是将空数组转成Boolean却是true,既然是true 为什么[ ]==false
接着往下看:
 Number([])//0
 0==false
总结:这说明一个问题,当空数组与布尔值进行比较时,是将==两边先转成Number在进行比较,这样可以解释的通了
所以,当空数组作为判断条件时,相当于true。当空数组与布尔值直接比较时,相当于false。
6、但是还有一个理解不了的问题,看下面
 [1]==false//false ,按照上边的结论 [1] 转成Number 结果是1转成布尔值是true 没错,但是下面有个问题
   new Array(2)==false//false 也没问题
  new Array(1)==false//true 可是new Array(1)是却是true,,
 //望大神解答?
7、接着还有一小个问题
[]==[] //false
[]==![]//true
明明是两空数组为什么不相等呢?
原因:是数组是有new Array() 创建出来的,两个数组即使值相等,它也是new Array()创建出来的两个实例对象,自然不会相等
8、直接拿数值与布尔值比较
  console.log(0==true)//false
  console.log(1==true)//true
console.log(1==false)//false console.log(
2==true)//false console.log(2==false)//false console.log("------------------") console.log(Boolean(0))//false console.log(Boolean(2))//true console.log(Boolean(1))//true
结论:①直接拿数值与布尔值进行比较,0是false,1是true,其他的数字直接与布尔值比较,无论比较2==false或2==true 结果都是false
   ②将数值转成布尔值只有0是false,其他都是true

原文地址:https://www.cnblogs.com/shengmo/p/8666946.html