扫码关注官方订阅号
如题
if(a){ //... } if(a == true){ //... } if(!!a){ //... }
问:
这三种写法有什么逻辑上的区别吗?
这三种写法在实际编程中各有什么好处?
认证0级讲师
我个人只会用第一种方法、
理论上来讲、他们三个的结果应该是一样的
但是从代码的优雅和美观上、我选择一
第一种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 类型
a
!!a
boolean
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的数据类型不同会有不一样的语义。
靠近的第一个!表示判断真假,第二个表示将真假转换为对应的boolean
看情况喽,就像1+1不一定等于2一样
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我个人只会用第一种方法、
理论上来讲、他们三个的结果应该是一样的
但是从代码的优雅和美观上、我选择一
第一种if(a)
a为以下值时转换为false
第二种if(a==true)
true转化为1,再和a比较
第三种if(!!a)
感觉和第一种一样啊
!!用来强制转化数据为布尔类型,比如:
没有区别。。。凑字数
有区别的,楼主请看
个人认为,其实第三种在实际使用中,一般返回或者强制类型的时候用的比较多,就是无论
a是什么类型,!!a的结果一定是boolean类型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的数据类型不同会有不一样的语义。
靠近的第一个!表示判断真假,第二个表示将真假转换为对应的boolean
看情况喽,就像1+1不一定等于2一样