Skip to content

[js] 第708天 说说==操作符的转换规则 #3728

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第708天 说说==操作符的转换规则

#523

3+1官网

我也要出题

Activity

xuan-zi

xuan-zi commented on Mar 24, 2021

@xuan-zi

==会进行强制类型转换,当数字2与字符串2比较的时候会将右边的转换为左边的类型再次比较, 像undefined, null等会转为Boolean类型。

Cqy1995

Cqy1995 commented on Mar 24, 2021

@Cqy1995
  • 首先判断类型是否相同,相同的话使用=== 进行比较.
  • 不同类型进行以下规则比较:
  1. 查看是否是 undefined 和 null 比较
    是的话,进行比较,null和undefined比较结果为true,它俩和自身比较为true,其余都为false.
  2. 查看是否是string与number比较,
    如果有string会转行成number,回到最初重新比较
  3. 查看是否有布尔类型
    如果有就把布尔类型转换成number,回到最初重新比较
  4. 查看是否有引用类型,
    如果有,那么将 object 转为其原始值 primitive 并回到最初重新比较
Jack-rainbow

Jack-rainbow commented on Mar 31, 2021

@Jack-rainbow
  • 比较的时候,如果是基础数据类型的话,那么就按普通的比较好,也就说根据ECMA2622 规则来判断
  • 如果两边都是obejct类型的话,那么会指向[symbol.promivtive]
    • 首先执行的是valueOf,如果valueOf返回的基础类型(null,unedfined,boolean,string,number),那么则返回
    • 如果valueOf返回的不是基础类型,那么则执行toString方法,如果可以正常转换则返回,如果不能转换则报错。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@Jack-rainbow@xuan-zi@Cqy1995

        Issue actions

          [js] 第708天 说说==操作符的转换规则 · Issue #3728 · haizlin/fe-interview