JavaScript中if语句的真值判定问题
PHP中文网
PHP中文网 2017-04-11 12:03:32
[JavaScript讨论组]
var a = [0];
if ([0]) { 
  console.log(a == true);
} else { 
  console.log("wut");
}

会输出 false

想知道 if 语句的真值判断是怎么的
还有

if(!!a){
    ...
}

中双感叹号的意义

我知道在其他地方双感叹号是强制转换为boolea值,但是在if语句中有什么意义

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(6)
ringa_lee

关于第一个,a是数组,经过转换后才是true,不是a本身等于true。而==的隐式转换通常会转换成数值来比较。

第二个的确没意义,if本身就会有Boolean()的转换。

伊谢尔伦

if里面如果不是boolean就先转换,再比较。!!是用来把值转换的,是一种语义化操作

PHP中文网

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值。

PHPz

好问题,说下我的一个‘猜测’:在数组只有一个元素的情况下,该数组会自动转化为数字类型。也即 [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的条件是个数组,数组转换为布尔值是true

PHP中文网
if语句除了遇到undefined,null,0,'',NaN,false外其余任何东西都是true逻辑。
但是你不能认为其他的所有东西都==true
如果要这么判断的话可以在前面加两个叹号,将其转化成boolean类型,如上面所说!!a == true
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号