前言

最近看到一道面试题问 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

复制代码

"=="的转换规则:

数字 == 字符串 会转换成 数字 == 数字数字 == 布尔值 会转换成 数字 == 数字字符串 == 布尔值 会转换成 数字 == 数字

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

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届前端想在广州找个技术氛围浓厚的团队。