类型总览
JS 中的数据类型
string
number
boolean
null
undefined
bigint
symbol
object
Array
Function
Date
Error
- ...
TS 中的数据类型
JS
所有数据类型6
个新类型:any
unknown
never
void
tuple
enum
- 两个用于自定义类型的方式:
type
interface
注意点
在
JS
中的这些内置构造函数:Number
,String
,Boolean
, 它们用于创建对应的包装对象, 在日常开发中很少使用 在TS
中也是同理, 所以在TS
中进行类型声明时, 通常都是小写的number
,string
,boolean
ts
let strA: string // 官方推荐写法
strA = 'Halo'
// strA = new String("World") // 不能将类型“String”分配给类型“string”。 “string”是基元,但“String”是包装器对象。如可能首选使用“string”
let strB: String
strB = 'Halo'
strB = new String("World")
console.log(typeof strA) // string
console.log(typeof strB) // object
原始类型和包装对象
- 原始类型: 如
number
,string
,boolean
, 在JS
中是简单数据类型, 它们在内存中占用空间少, 处理速度快 - 包装对象: 如
Number
对象,String
对象,Boolean
对象, 是复杂类型, 在内存中占用更多空间, 在实际开发中很少使用包装对象创建对象
自动装箱
JS
在必要时会自动将原始类型包装成对象, 以便调用方法或者访问属性
js
// 原始类型字符串
let str = 'Halo World'
// 当访问 str.length 时, JS 引擎做了以下工作
let size = (function() {
// 1. 自动装箱,创建一个临时的 String 对象包装原始字符串
let tempStringObject = new String(str);
// 2. 访问 String 对象的 length 属性
let lengthValue = tempStringObject.length;
// 3. 销毁临时对象,返回长度值,JS引擎会自动处理对象销毁,开发中无感知
return lengthValue;
})();