javascript - js 中 if(a) if(a == true) if(!!a) 的区别
PHP中文网
PHP中文网 2017-04-11 09:11:37
[JavaScript讨论组]

如题

if(a){
    //...
}

if(a == true){
    //...
}

if(!!a){
    //...
}

问:

  • 这三种写法有什么逻辑上的区别吗?

  • 这三种写法在实际编程中各有什么好处?

PHP中文网
PHP中文网

认证0级讲师

全部回复(10)
ringa_lee

我个人只会用第一种方法、

理论上来讲、他们三个的结果应该是一样的

但是从代码的优雅和美观上、我选择一

天蓬老师

第一种if(a)
a为以下值时转换为false

false
undefined
null
0
-0
NaN
""

第二种if(a==true)
true转化为1,再和a比较
第三种if(!!a)
感觉和第一种一样啊

迷茫

!!用来强制转化数据为布尔类型,比如:

 return !!elements.className.match(new RegExp('(\\s|^)' + cName + '(\\s|$)'));
大家讲道理

没有区别。。。凑字数

大家讲道理

有区别的,楼主请看

var a = 'aaa';

if(a){
    console.log(true)
}else{
    console.log(false)
}
VM519:1 true

if(a == true){
    console.log(true)
}else{
    console.log(false)
}
VM541:1 false
伊谢尔伦

个人认为,其实第三种在实际使用中,一般返回或者强制类型的时候用的比较多,就是无论a是什么类型,!!a的结果一定是 boolean 类型

PHPz

if(a)通常用作对象检测,在javascript里几乎所有的东西(包括各种方法在内)都可以被当作对象来对待,例如if(!document.getElemetById)return false; 可以判断浏览器是否支持该方法,如果不支持就退出,这个在平稳退化中经常用到。if(a == true)会把true强制转化1, 然后再和a进行比较,如果a的值为1,括号里表达式的值永远true,如果a不为1,括号里表达式的值是false。还有一种if(a === true)。这时候true就不会转化为1,除非a的值也为true,a也可以是表达式,值为true,否则括号里表达式的值永远false。第三中和第一种差不多。。。。

黄舟

请复习有关数据类型的知识。
还有就是这么写的意图是什么?
a的数据类型不同会有不一样的语义。

PHPz

靠近的第一个!表示判断真假,第二个表示将真假转换为对应的boolean

伊谢尔伦

看情况喽,就像1+1不一定等于2一样

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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