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 处理逻辑

  1. 基础类型数据,直接return返回数据本身;
  2. 引用类型
    1. toString
    2. 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).

参考

  1. https://www.ecma-international.org/ecma-262/5.1/
    image.png
上一篇下一篇

猜你喜欢

热点阅读