什么是Symbol?

Symbol是ES6引入的新的原始数据类型,表示独一无二的值。

基本特点:

  • 每个Symbol值都是唯一的,即使传入相同的参数

  • 不能使用new操作符,直接调用Symbol()创建

  • 可以用作对象的属性名,避免属性名冲突

主要用途:

  • 创建唯一的属性名,避免命名冲突

  • 实现私有属性(虽然不完全私有)

  • 定义对象的特殊行为,如迭代器

内置Symbol:

  • Symbol.iterator:定义对象的默认迭代器

  • Symbol.toPrimitive:定义对象转换为原始值的行为

  • Symbol.toStringTag:定义对象的字符串描述

使用场景:

  • 库开发时避免属性名冲突

  • 实现迭代器模式

  • 定义对象的特殊行为

注意:

  • Symbol作为属性名时不会被for…in循环遍历

  • 需要通过Object.getOwnPropertySymbols获取Symbol属性

  • 可以传入字符串作为描述,但主要用于调试

Symbol为JavaScript提供了创建唯一标识符的能力,是ES6中重要的元编程特性。