首页 > JavaScript中if语句的真值判定问题

JavaScript中if语句的真值判定问题

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。

==相等操作会转换操作数(强制转型),然后再比较他们的相等性。在转换不同的数据类型时,相等操作符遵循下列基本规则:

  1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而true 转换为1;

  2. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;

[0] == true
先将true转为1,再将[0]转为[0].valueOf() ==> 0,所以为false。

!!双重否定,就是将a转换成相应的Boolean值。

【热门文章】
【热门文章】