javascript - js 中 if(a) if(a == true) if(!!a) 的区别

查看:108
本文介绍了javascript - js 中 if(a) if(a == true) if(!!a) 的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题

if(a){
    //...
}

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

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

问:

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

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

解决方案

第一种和第三种没区别,第三种就是类型转化。
第二种是计算a==true的返回值,。
值等于是比较值的。
所以浏览器会先将运算符两边的变量/表达式的值先算出来,并转换成同类型(基本类型)的形式进行比较。
像这种比较运算符或者一些基本概念问题,我有一个推荐:
JavaScript 5
http://ecma-international.org...
JavaScript 6
http://ecma-international.org...
你可以到对应版本的JavaScript中寻找你需要的解释。
回到本题,先来看一下 == 运算符它的原理吧:

这个就是浏览器在遇到 == 时采取的操作步骤,我来翻译一下是什么意思:

==运算符是这样被计算的:

1 让左引用(lref: left reference)成为正在计算的表达式左侧的值。
2 将左值(lval:left value)赋值为 GetValue(lval)。
3 让右引用(rref: right reference)成为正在计算的表达式右侧的值。
4 将右值(rval:left value)赋值为 GetValue(rval)。
5 返回执行rval == lval 抽象值比较的结果(参见 11.9.3)

那么在11.9.3,又是怎么规定abstract equality comparison 的呢?

这就比较长了,但是也很详细。这就不一条一条的解释了。
至于上面有人提到的 2 == true 是false,来看看是怎么回事
直接看第七条就好了:
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
那么结果就变成了:
2 == 1
所以就错了。。。。
当然,三种形式的优缺点我感觉是没有。。
你也可以参考别人的答案。

这篇关于javascript - js 中 if(a) if(a == true) if(!!a) 的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆