if(3 == true) ?

前言

最近看到一道面试题问 if(3 == true) 的结果,第一反应就觉得是true,因为 if(3) 的结果是true。但是console了一下发现并不是,于是就去翻了一下资料。

"==" 和 "==="

在console里面试了一下下面几种情况:

1 == true   // true
2 == true   // false
3 == true   // false
1 == false  // false
0 == false  // true
复制代码

相信聪明的同学已经知道了其中的原理。

"==="的作用是检查两边的 值 和 类型 是否相等。

而"=="其实也可以理解成检查两边的 值 和 类型 是否相等,但是当类型不等的时候会给第二次机会让它转成相同类型再比较值是否相等。

总结

1 == true   // 布尔值会转成number true即为1 所以结果是true
2 == true   // 布尔值会转成number true即为1 所以结果是false
3 == true   // 布尔值会转成number true即为1 所以结果是false
1 == false  // 布尔值会转成number false即为0 所以结果是false
0 == false  // 布尔值会转成number false即为0 所以结果是true
复制代码

"=="的转换规则:

  1. 数字 == 字符串 会转换成 数字 == 数字
  2. 数字 == 布尔值 会转换成 数字 == 数字
  3. 字符串 == 布尔值 会转换成 数字 == 数字

至于对象和数组的比较会复杂一点,如下:

var obj1 = {
    a : 1
}
var list1 = [1]
var obj2 = {
    a : 1
}
var list2 = [1]
console.log(obj1 == obj2); // false
console.log(list1 == list2); // false
复制代码

比较对象和数组的时候可以用underscore封装好的的isEqual方法的校验,个中奥妙可以参透源码,源码就贴在下面吧。

underscore isEqual

最后18届前端想在广州找个技术氛围浓厚的团队。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值