1. Symbol
- 定义:表示唯一的、不可变的标识符
- 核心特性:
- 每个Symbol值都是唯一的
- 可作为对象属性的键
- 不会被常规方法枚举
- 解决的问题:
- 属性名冲突
- 创建私有或半私有属性
- 定义特殊的对象行为
- 应用场景:
- 第三方库集成
const PRIVATE_DATA = Symbol('privateData'); class LibraryA { constructor(element) { element[PRIVATE_DATA] = { counter: 0 }; } }
- 实现私有属性
const _name = Symbol('name'); class Person { constructor(name) { this[_name] = name; } }
- 自定义迭代行为
class Collection { [Symbol.iterator]() { // 自定义迭代逻辑 } }
- 单例模式实现
- 自定义类型转换
- 第三方库集成
2. BigInt
- 定义:表示任意精度的整数
- 核心特性:
- 可表示超过Number.MAX_SAFE_INTEGER的整数
- 使用n后缀或BigInt()构造
- 不能与Number直接混合运算
- 解决的问题:
- 大整数精度丢失
- 超大整数计算
- 应用场景:
- 金融和会计系统
const largeAmount = 9007199254740992n; const interest = largeAmount * 5n / 100n;
- 密码学和加密算法
function isProbablePrime(n) { // 使用BigInt实现素数测试 }
- 科学计算
- 时间戳和ID处理
- 区块链和加密货币
class Wallet { constructor() { this.balance = 0n; // 使用BigInt存储代币数量 } }
- 金融和会计系统
3. Map
- 定义:键值对集合,键可以是任何类型
- 核心特性:
- 任何值都可作为键
- 保持插入顺序
- 提供size属性和丰富的方法
- 解决的问题:
- 对象键只能是字符串或Symbol
- 对象原型链属性冲突
- 对象迭代顺序不可靠
- 对象大小获取不直观
- 应用场景:
- 缓存系统
const cache = new Map(); function memoize(fn) { return function(...args) { const key = JSON.stringify(args); if (!cache.has(key)) { cache.set(key, fn(...args)); } return cache.get(key); }; }
- DOM元素数据关联
const elementData = new Map(); document.querySelectorAll('.item').forEach(el => { elementData.set(el, { clicked: false }); });
- 用户会话管理
- 图数据结构实现
class Graph { constructor() { this.nodes = new Map(); // 存储节点和邻接节点 } }
- 状态机实现
- 缓存系统
4. Set
- 定义:存储唯一值的集合
- 核心特性:
- 自动去重
- 可存储任何类型的值
- 保持插入顺序
- 应用场景:
- 去重操作
const uniqueNumbers = [...new Set([1, 2, 2, 3, 4, 4])];
- 集合操作
function intersection(setA, setB) { return new Set([...setA].filter(x => setB.has(x))); }
- 唯一值检查
- 去重操作
5. WeakMap 和 WeakSet
- 定义:
- WeakMap:键必须是对象的Map
- WeakSet:只能存储对象的Set
- 核心特性:
- 弱引用,不阻止垃圾回收
- 没有size属性,不可迭代
- 应用场景:
- 关联数据存储
const domData = new WeakMap(); function setupElement(element) { domData.set(element, { clickCount: 0 }); }
- 缓存对象
- 私有数据存储
const privateData = new WeakMap(); class User { constructor(name) { privateData.set(this, { name }); } getName() { return privateData.get(this).name; } }
- 关联数据存储
6. 类型化数组(Typed Arrays)
- 定义:用于处理二进制数据的类数组对象
- 主要类型:
- Int8Array, Uint8Array, Uint8ClampedArray
- Int16Array, Uint16Array
- Int32Array, Uint32Array
- Float32Array, Float64Array
- 应用场景:
- 二进制数据处理
const buffer = new ArrayBuffer(16); const int32View = new Int32Array(buffer);
- WebGL和图形处理
- 文件和网络I/O
- 音频处理
- 二进制数据处理
7. Promise(不是数据类型但很重要)
- 定义:表示异步操作的最终完成或失败
- 核心特性:
- 链式调用
- 错误处理
- 组合多个Promise
- 应用场景:
- 异步操作序列
fetch('/api/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
- 并行操作
Promise.all([ fetch('/api/users'), fetch('/api/products') ]).then(([usersResponse, productsResponse]) => { // 处理多个响应 });
- 超时处理
- 异步资源管理
- 异步操作序列