JavaScript类型总结

119 阅读2分钟

类型是值的内部特征,它定义了值的行为以使其区别于其他值。JavaScript中变量没有类型,值才有。

内置基本类型

8种,分为原始类型和引用类型。

  1. 原始类型
  • number 用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数。
  • bigint 用于任意长度的整数。(ES2020)
  • string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
  • boolean 用于 truefalse
  • null 用于未知的值 —— 只有一个 null 值的独立类型。
  • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。
  • symbol 用于唯一的标识符。(ES2015)
  1. 引用类型
  • object 用于更复杂的数据结构。
  1. 原始类型和引用类型的区别:
  • 原始类型值无法更改
  • 原始类型判断是否相等比较的是值,引用类型比较的是地址
  • 复制原始类型值是独立拷贝,复制引用类型复制的是地址,他俩指向用一个对象。

类型转换

1.隐式转换:

  • 原始类型:String();Number();Boolean;

  • 引用类型:

    • 调用 obj[Symbol.toPrimitive](hint) 如果这个方法存在,

    • 否则,如果 hint 是

      "string"
      
      • 尝试 obj.toString()obj.valueOf(),无论哪个存在。
    • 否则,如果 hint 是

      "number"
      

      或者

      "default"
      
      • 尝试 obj.valueOf()obj.toString(),无论哪个存在。

2.显示转换:

  • String();Number();Boolean;Object()

  • .toString() // undefined null 没有
    Number(3).toFixed()
    Number(3).toExponential()
    Number(3).toPrecision()
    ''+value  // 特殊 先调用valueOf
    +value
    parseInt();
    parseFloat();
    

类型识别

  1. typeOf value任何引用对象只能识别为对象,null也是对象
  2. obj instance costructor 判断变量是否是给定类的实例,不可跨frame
  3. obj.constructor.name 可检测自定义类型,null,undefined没有,不检查原型链有原型时失效,多重继承失效,不可跨frame 4.鸭子类型duck-typing isArray的原理 5.Object.prototype.toString.call(obj) 检测[[class]] 可以检测所有原生对象,不可检查自定义对象的具体类型。