==相等两边的转换规则

330 阅读1分钟

“==” 相等,比较值

“===”,比较的是类型和值

大家在工作中应该会看到很多人有时候用"==",有时候用"===",今天就讲讲"==" 先做几个题目

console.log(1,false == 0)
console.log(2,false == 1)
console.log(3,false == "1")
console.log(4,false == null)
console.log(5,false == undefined)
console.log(6,1 == [])
console.log(7,1 == [1])
console.log(8,[1] == [1])
console.log(9,[] == ![])

答案:1 true,2 false,3 false,4 false,5 false,6 false,7 true,8 false,9 true

刚开始大家做这些题的时候可能心里是很没有底气的,基本是凭感觉,那么我来说一下

相等的转换规则

  1. NaN 与任何值不相等,包括NaN自己
  2. null 除了 null 和 undefined,与任何值不相等
  3. undefined 除了 null 和 undefined,与任何值不相等
  4. 操作数两边有数字或者是布尔类型的,就都转换成 数字进行比较
  5. 操作数两边如果有字符串,都转成字符串进行比较
  6. 如果操作数两边都是引用类型,就比较地址

注意点:上面的规则是从上往下一条条的去匹配规则,匹配到了就应用哪条规则

console.log(NaN == 1) // false
console.log(NaN == 0) // false
console.log(NaN == NaN) // false
console.log(null == 1) // false
console.log(null == 0) // false
console.log(null == undefined) // true
console.log(null === undefined) // false
console.log(false == 1) // false 0 == 1
console.log(false == "1") // false
console.log([] == ![]) // true
最后一个为true的原因,![] 为Boolean的false 第4条转换成0,[] 转换成Boolean为true 但是转换成数字是0 所以[] == ![] 的结果是true

提示:

Boolean() 函数可以将任意类型的值转为布尔值 它的转换规则相对简单:除了以下五个值的转换结果为false,其他的值全部为true

undefined,null,0,NaN,''(空字符串)