前端数据类型全景解析
前端数据类型完全解析:JS/ES/TS全版本指南
数据类型演进历程
- ES1 (1997): 基础6大类型
- ES5 (2009): 严格模式类型校验
- ES6 (2015): Symbol类型、类语法
- ES2020: BigInt类型
- TypeScript: 静态类型扩展
一、JavaScript核心数据类型
1. 原始类型(Primitive Types)
类型
ES版本
示例
特点
undefined
ES1
let a;
声明未赋值
null
ES1
let b = null;
空对象指针
boolean
ES1
true / false
逻辑判断基础
number
ES1
0x1F / 3.14
双精度浮点数
string
ES1
`模板字符串`
UTF-16编码
symbol
ES6
Symbol('id')
唯一不可变
bigint
ES2020
123n
大整数计算
2. 引用类型(Reference Types)
// 对象类型
const obj = {
key: 'value',
[Symbol('id')]: 123
};
// 数组类型
const arr = [1, '2', {3: true}];
// 函数类型
function demo() {
return this;
}
// 其他内置对象
const date = new Date();
const regex = /pattern/g;
二、TypeScript类型扩展
TypeScript
1. 增强类型系统
类型
示例
说明
any
let a: any = '任意值';
禁用类型检查
unknown
let b: unknown = fetchData();
类型安全版any
void
function(): void {}
无返回值
never
function error(): never { throw ... }
永不返回
enum
enum Color { Red, Green }
枚举类型
tuple
[string, number]
固定长度数组
TypeScript
2. 高级类型系统
// 联合类型
type StringOrNumber = string | number;
// 交叉类型
interface Named { name: string }
interface Aged { age: number }
type Person = Named & Aged;
// 类型别名
type Callback = (data: string) => void;
// 泛型
interface Box {
content: T;
}
// 字面量类型
type Direction = 'left' | 'right';
三、类型系统最佳实践
1. 类型检测方法对比
方法
适用场景
注意点
typeof
原始类型检测
null返回'object'
instanceof
对象类型检测
原型链问题
Array.isArray()
数组检测
ES5+支持
Object.prototype.toString.call()
通用类型检测
返回[object Type]
四、常见问题解析
1. 疑难问题解答
Q: undefined vs null的区别?
A: undefined表示未定义,null表示空对象引用。建议:用null初始化空值
Q: TS中any和unknown的区别?
A: any绕过类型检查,unknown需要类型断言后才能使用
Q: 如何判断BigInt类型?
A: 使用typeof检测:typeof 1n === 'bigint'
动态到静态:从JS的运行时类型到TS的编译时类型检查
简单到复杂:基础类型 → 泛型/条件类型
松散到严格:any类型 → unknown/never类型约束
版本 | 新增类型 | 重要特性 |
---|---|---|
ES6 | Symbol | 类语法糖 |
ES2015 | let/const块级作用域 | |
ES2020 | BigInt | 可选链操作符?. |
TS 2.0 | Non-nullable类型 | 严格空值检查 |
TS 4.0 | 可变元组类型 | 标记元组元素 |
栈内存:存储原始类型(直接存储值)
堆内存:存储引用类型(存储内存地址)
特殊处理:
// 字符串特殊处理(常量池复用)
const a = "text";
const b = "text";
console.log(a === b); // true
// 类型守卫
function isString(val: unknown): val is string {
return typeof val === 'string';
}
// 类型断言
const input = document.getElementById('input') as HTMLInputElement;
// 映射类型
type Readonly = {
readonly [P in keyof T]: T[P];
}
// 条件类型
type NonNullable = T extends null | undefined ? never : T;
// 模板字面量类型
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
type ApiPath = `/api/${string}`;
避免频繁类型转换:减少装箱/拆箱操作
对象池管理:复用对象减少GC压力
类型推断优化:合理使用TS的const断言
// const断言保持字面量类型
const sizes = ['small', 'medium', 'large'] as const;
本指南全面覆盖了从JavaScript到TypeScript的所有数据类型特性,建议结合TypeScript Playground进行实践验证,以深入理解类型系统的运行机制。
如果对你有帮助,请点个赞