js 双等("==")运算过程
2019-11-22 本文已影响0人
webmrxu
示例:x == y 返回结果 false 或者 true , 浏览器是如何判断等,判断逻辑是什么?
判断逻辑
1 判断 Type(x) 与 Type(y) 是否相同,相同则执行严格相等运算“===”。
2 unll 和 undefined 判断
if (x === null && y === undefined) {
return true
}
3 undefined 和 unll 判断
if (x === undefined && y === null) {
return true
}
4 数值和字符串判断
if(Type(x) === Number && Type(y) === String) {
return x == ToNumber(y)
}
5 字符串和数值判断, 字符串转Number
if(Type(x) === String && Type(y) === Number) {
return ToNumber(x) == y
}
6 x: 布尔值和 y: 其他类型判断 return x == ToNumber(y)
7 x: 其他类型和 y: 布尔值判断 return ToNumber(x) == y
8 x: 基础类型数据和 y: 引用类型数据判断 return x == ToPrimitive(y)
9 x: 引用类型数据和 y: 基础类型数据判断 return ToPrimitive(x) == y
10 其他情况 return false
ToPrimitive 处理逻辑
- 基础类型数据,直接
return
返回数据本身; - 引用类型
- toString
- valueOf
参考:https://www.ecma-international.org/ecma-262/5.1/#sec-9.1
数据类型 | 返回结果 |
---|---|
Undefined | 返回原值,不转换 |
Null | 返回原值,不转换 |
Boolean | 返回原值,不转换 |
Number | 返回原值,不转换 |
String | 返回原值,不转换 |
Object | 8.12.8. |
ToNumber 处理逻辑
note:
引用类型:ToPrimitive -> ToNumber
参考:https://www.ecma-international.org/ecma-262/5.1/#sec-9.3
数据类型 | 返回结果 |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | true 转换为1. false 转换为+0 |
Number | 返回原值,不转换 |
String | 1. ToPrimitive(input argument, hint Number) 2. ToNumber(primValue). |
Object | 1. ToPrimitive(input argument, hint Number) 2. ToNumber(primValue). |