美文网首页
js 双等("==")运算过程

js 双等("==")运算过程

作者: webmrxu | 来源:发表于2019-11-22 18:43 被阅读0次

示例: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

相关文章

  • js 双等("==")运算过程

    示例:x == y 返回结果 false 或者 true , 浏览器是如何判断等,判断逻辑是什么? 判断逻辑 1...

  • 运算符

    运算符 JS中为我们定义了一套对数据进行运算的运算符。 这其中包括:算数运算符、位运算符、关系运算符等。 算数运算...

  • JavaScript 02 (运算符和选择结构)

    js的关系运算符,js的逻辑运算符,js的赋值运算符,js的运算符的优先级问题,js的自增和自减,js的选择结构 ...

  • JS运算符

    JS中为我们定义了一套对数据进行运算的运算符。 这其中包括:算数运算符、位运算符、关 系运算符等。 算数运算符顾名...

  • 运算符

    JS中为我们定义了一套对数据进行运算的运算符 基本的运算符有 +(加) -(减) *(乘) /(除) %(取余)等...

  • 前端(运算符)

    与或运算 Unicode编码 相等运算符 条件运算符 js操作属性 js函数

  • 运算符及js操作属性

    关系运算符 相等运算符 条件运算符 运算符的优先级 代码块 js操作属性 js操作style属性 js操作clas...

  • 使用underscorejs解决js的大数问题

    js的浮点运算存在精度问题原因:js对于number类型的数使用的是IEEE754标准中的双精度数存储,总共64位...

  • 面试题总结

    1. js连等复制运算var a = {n: 1};var b = a;a.x = a = {n: 2};aler...

  • 2020-03-16

    JavaScript 初识 《① JS 速览——进入 JS 的世界》[编号:js_01] 《② 运算符、运算符优先...

网友评论

      本文标题:js 双等("==")运算过程

      本文链接:https://www.haomeiwen.com/subject/ybvqwctx.html