在JS中 两等的比较方式,不比较类型。会强制进行类型转换后进行比较,记录各种类型比较的转换过程。
/*
* 数字 == 字符串
* 先将字符串转换为数字
* 验证
*/
console.log(121 == '121') // true
console.log(Number('121') == 121) // true
/**
* 字符串 == 对象
* 对象会先调用toString转换为字符串
* 对象统一转换为'[object Object]' 与字符串进行比较
*/
console.log(Object.prototype.toString.call({})) // '[object Object]'
console.log(Number('[object Object]') == 'NaN') // false NaN != NaN
console.log('[object Object]' == {
a: 1,
b: 1,
c: 1
}) // true
console.log('[object Object]' == {}) // true
/**
* null == undefined / undefined == null // true
*/
/**
* 对象 == 对象
* 比较引用地址是否相同
*/
let obja = {}
objb = obja
console.log({} == {}) // false
console.log(obja == objb) // true
/**
* 对象 == boolean值
* 两边都会转换为数值进行比较
* 导致永远不会相等
* 因为对象会先转换为字符串变成'[object Object]'然后在转变为数值则是NaN
* 那么布尔值 只有 0 和 1 所以不可能相等
*/
console.log({} == true) // false
/**
* 数字 == boolean值
* 转为数字进行比较
*/
console.log(1 == true) // true
console.log(0 == false) // true
console.log(NaN == false) // false
/**
* 最奇怪的要数 NaN 自身和自身比较不相等
*/
console.log(NaN == NaN) // false
console.log(NaN != NaN) // true
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。