古来圣贤皆寂寞 惟有【努】者留其名 ---【努】原文:饮
先总结一个小知识点:0、null、NaN、undefined、"" 转成布尔值为false 其他则一律返回true
1、首先明白一点:初始化后的数组,即使是空数组,也是一个object 当然非空数组肯定是一个object
console.log(typeof [])//object console.log(typeof(new Array()))//object2、既然是对象,用于判断条件就会转成trueif([]){ console.log(1)//1 可以打印出来 }3、但是将[]与布尔值比较却是false[]==false //true Boolean([])//true4、但是将空数组转成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