==与===的区别
- 使用==时,若两边类型相同,隐式调用===;若两边类型不同则先进行类型转换,再隐式调用===
- 使用===时,比较栈内存地址中的值是否相同;若是基本类型,则值为常量,若是引用类型,则值为堆内存地址
使用==时的类型转换
左右两边类型不同时,非Number类型转为Number类型后比较,但null、undefined除外
null与undefined的区别
Number(null) // 0
Number(undefined) // NaN
typeof null // object
typeof undefined // undefined
案例
1 == "1" // true
1 === "1" // false
"" == 0 // true
" " == 0 // true
true == 1 // true
false == 0 // true
NaN == NaN // false
null == 0 // false
undefined == 0 // false
null == undefined // true
null === undefined // false
引用类型比较
let a = {};
let b = {};
let c = a;
a === b; // false 堆内存地址不同
a === c; // true 堆内存地址相同