var a = [0];
if ([0]) {
console.log(a == true);
} else {
console.log("wut");
}
会输出 false
想知道 if
语句的真值判断是怎么的
还有
if(!!a){
...
}
中双感叹号的意义
我知道在其他地方双感叹号是强制转换为boolea
值,但是在if
语句中有什么意义
var a = [0];
if ([0]) {
console.log(a == true);
} else {
console.log("wut");
}
会输出 false
想知道 if
语句的真值判断是怎么的
还有
if(!!a){
...
}
中双感叹号的意义
我知道在其他地方双感叹号是强制转换为boolea
值,但是在if
语句中有什么意义
关于第一个,a是数组,经过转换后才是true,不是a本身等于true。而==的隐式转换通常会转换成数值来比较。
第二个的确没意义,if本身就会有Boolean()的转换。
if中传入的参数会被转换成Boolean数据类型。
数组的数据类型是Object,任何非null对象转换成Boolean均为true。
==相等操作会转换操作数(强制转型),然后再比较他们的相等性。在转换不同的数据类型时,相等操作符遵循下列基本规则:
如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而true 转换为1;
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
[0] == true
先将true转为1,再将[0]转为[0].valueOf() ==> 0,所以为false。
!!双重否定,就是将a转换成相应的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判断和外面的妖艳贱货是不一样的。其他的们只能等大神来解释了
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决