var a = [0];
if ([0]) {
console.log(a == true);
} else {
console.log("wut");
}
会输出 false
想知道 if
语句的真值判断是怎么的
还有
if(!!a){
...
}
中双感叹号的意义
我知道在其他地方双感叹号是强制转换为boolea
值,但是在if
语句中有什么意义
https://www.zhihu.com/questio... 转载自知乎.
if语句除了遇到undefined,null,0,'',NaN,false外其余任何东西都是true逻辑。
但是你不能认为其他的所有东西都==true
如果要这么判断的话可以在前面加两个叹号,将其转化成boolean类型,如上面所说!!a == true
第一个if的条件是个数组,数组转换为布尔值是true
关于第一个,a是数组,经过转换后才是true,不是a本身等于true。而==的隐式转换通常会转换成数值来比较。
第二个的确没意义,if本身就会有Boolean()的转换。
if里面如果不是boolean就先转换,再比较。!!是用来把值转换的,是一种语义化操作
好问题,说下我的一个‘猜测’:在数组只有一个元素的情况下,该数组会自动转化为数字类型。也即 [1]==1 ,[2]==2,[3]==3.好吧,这样就就很明了了,1==true,0==false,而2==true 返回false.对应数组[2]==true也返回false。
不过在if()判断中,如果不是undefined,=0,-0,NaN,'',null类型,应该返回true,包括[]也是返回true。
总的来说,if判断和外面的妖艳贱货是不一样的。其他的们只能等大神来解释了
if中传入的参数会被转换成Boolean数据类型。
数组的数据类型是Object,任何非null对象转换成Boolean均为true。
==相等操作会转换操作数(强制转型),然后再比较他们的相等性。在转换不同的数据类型时,相等操作符遵循下列基本规则:
如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而true 转换为1;
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
[0] == true
先将true转为1,再将[0]转为[0].valueOf() ==> 0,所以为false。
!!双重否定,就是将a转换成相应的Boolean值。