重点
//在严格比较下 null不等于undefined 是成立
console.log(null !== undefined) // true
//相对比较 [] == false
console.log([] != false) // false
复制代码
==(两个等号的情况)
== 相对比较等于 如果比较的两个值不同一个类型 就进行数据转换 再进行比较
复制代码
Number()
1.字符串和数字比较 将字符串转换为数字 再进行比较
console.log('2' == 2)
console.log('3' == 2)
console.log('3px' == 3) // Number('3px') == 3
2.boolean和数字 true 1 false 0 将boolean转换为数字 再进行比较
console.log(true == 1)
console.log(false == 0)
console.log([] == 1)
console.log([] == 0)
跟数字比较 先把其他类型转换成数字再进行比较 (Number())NaN
boolean和其他值比较 转换成数字
console.log(true == '') // false 1 == 0
console.log(true == 'true') // false 1 == NaN
console.log(false == 'false') // false 0 == NaN
console.log(true == []) // false Number([]) 0
console.log(false == []) // true
相对比较时 null undefined 和其他值都不相等
console.log(null == undefined) // true
console.log(null == 1) // false
console.log(undefined == 1) // false
工作中和null undefined 比较时用 ==
其余都是=== 严格比较
复制代码
3.其他类型(除了数字 boolean)和字符串比较
将其他类型转换成字符串 再进行比较
console.log('abc' == 'abcd') // 比较里面字符内容
// 将数组转换成字符串 toString()
console.log([].toString()) // ""
console.log(({id: 1}).toString()) // "[object Object]"
console.log(true.toString()) // "true"
// /\d+/
console.log([] == '') // true [].toString() == ''
var obj = {} // "[object Object]"
console.log({} == '') // false "[object Object]" == ''
复制代码
4.对象类型和对象类型
var obj1 = {} // 浏览器为obj1分配了一块内存
var obj2 = {} // 浏览器为obj2分配了一块内存
console.log(obj1 == obj2) //false 比较是引用地址
console.log({} == {}) // false 比较是引用地址
console.log([] == []) // false
var obj1 = {} // obj1的指针 指向了这个内存空间
var obj2 = obj1 // obj2的指针 此时也指向了这个地址
console.log(obj1 == obj2) // true
它俩的指针分别指向 两块内存
var obj3 = {} // 内存1
var obj4 = {} // 内存2
复制代码
=== 绝对等于(严格比较) 不会进行数据类型转换
- 1.先看数据类型 如果数据类型不相等 就直接返回false
- 2.如果数据类型相等 就比较具体值
console.log(true === 1)//(布尔和数字绝对比较)false
console.log({} === {})//(对象和对象绝对比较)比较引用地址,结果是false
console.log(NaN === NaN)//(NaN和任何值比较都是false,包括自己)false
特殊 null undefined
相对比较时 == (null和undefined才相等)
null == undefined // true
绝对比较(三个等号) ===
null === undefined // false
// if
// == ===
// boolean
复制代码