美文网首页
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 双等("==")运算过程

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