Skip to content

2.JS中的类型及类型转换、typeof、==和===、Object.is

类型种类

JS共有7种原始类型,分别是:

  • String
  • Number
  • Boolean
  • Undefined
  • Null
  • Symbol
  • Bigint

JS有一种引用类型

  • Object

typeof

typeof会返回以下类型(null显示为Object,bigint显示为Number):

  • String
  • Number
  • Boolean
  • Undefined
  • Symbol
  • Object

=====

JS中 == 是相同的意思, === 代码严格相同

==

比较过程

  • 如果两个值类型相同,就进行三个等号的比较
  • 如果两个值类型不同
    • 如果一个为null、一个为undefined,相等
    • 如果一个是字符串,一个是数值,则把字符串转换为数值后再比较。

===

比较过程

  • 如果类型不同,一定不相同
  • 如果两个都是数值,并且值相等,则相等
    • 如果一个是NaN,一定不相等
  • 如果两个都是字符串,每个位置字符都一样,那么相等,否则不等
  • 如果两个值都是true,或是false就相等
  • 如果两个值都是引用同一个对象或是函数,那么相等,否则不相等
  • 如果两个值都是null,或是undefined,那么相等

Object.is

=====相比,NaN相等,+0-0相等,'1'1不相等

类型转换

显式转换

转为Boolean

  • 使用Boolean()方法
类型转换结果
string空字符串('')false
string非空字符串('abc')true
Number除了0和NaN(10)true
Number0、NaNfalse
undefined、Nullundefined、nullfalse
Object非空对象true
ObjectObject.create(null)false

转为String

  • 使用String()

    可以转换所有值(非null和undefined会直接调用toString)

  • 使用toString(num)

    可以将除了null和undefined以外的所有数据转为字符串 num可以指定进制数的转换(2、8、10、16)

转为Number

  • 使用Number() 可以转换任何类型

    类型结果
    Booleantrue1
    Booleanfalse0
    Number所有数字直接返回
    Nullnull0
    undefinedundefinedNaN
    String数值,转换为10进制
    String浮点数转换相应浮点值
    String十六进制数转换十进制
    String空字符串('')0
    String其他字符串('abc')NaN
  • 使用parseInt() 从第一个非空格字符开始转换,如果非数字,则返回NaN。如果是数字则继续解析直到遇到非数字字符。

  • 使用parseFloat() 与parseInt类似,但是遇到第一个小数点不会暂停。

隐式转换

隐式转换由JS自动完成。

引用类型转换

JS内部会调用——toPrimitive(input, preferredType)方法

  • 如果PreferredType为Number

    1. 如果输入的是原始值,直接返回
    2. 如果输入的值是一个对象,调用该对象的valueOf()方法,如果ValueOf()返回的是一个原始值,则返回。
    3. 否则,调用toString()方法,如果toString()返回的是一个原始值,则返回。
    4. 否则,抛出TypeError异常。
  • 如果PreferredType为String

    1. 如果输入的是原始值,直接返回
    2. 如果输入的值是一个对象,调用该对象的toString()方法,如果toString()返回的是一个原始值,则返回。
    3. 否则,调用valueOf()方法,如果valueOf()返回的是一个原始值,则返回。
    4. 否则,抛出TypeError异常。

    如果未指定preferred,有以下两种情况

    1. input为Date类型,preferred为String
    2. 其余的为Number

== 运算符隐式转换

  • Number和String转为Number进行比较
  • Boolean转换为Number进行比较
  • Object和String或Number比较时,将其转为原始类型后再比较。

KESHAOYE-知识星球