ES2015 Symbol 一种绝不重复的值
本文介绍ES2015新增的Symbol数据类型,强调其唯一性。讲解Symbol()函数的用法、描述参数的作用,以及Symbol值不可隐式转换的特性。同时列举Symbol.for()、Symbol.keyFor()等方法及Symbol.iterator等内置Symbol值,帮助开发者理解并应用这一类型。
Symbol类型概述
ES2015引入了Symbol,这是一种表示绝对唯一值的数据类型。关于JavaScript中引用类型与基本类型的详细分类,可参考相关章节进行了解。
具体代码示例如下:
let sVal = Symbol();
console.log(typeof sVal)
Symbol()函数与描述符
上述代码执行后,输出结果为字符串"symbol"。通过调用Symbol()函数即可创建一个Symbol类型的值。需要特别注意,Symbol属于基本数据类型,因此严禁使用new关键字进行实例化,否则程序将抛出错误。Symbol()函数还可以接收一个字符串作为参数,该参数用于描述Symbol值,也可视为其键(key)。具体代码示例如下:
let s1 = Symbol("本站");
let s2 = Symbol("ww.jb51.net";
设置键的主要目的是便于区分不同的Symbol值,具体代码示例如下:
let s1 = Symbol("本站");
let s2 = Symbol("www.jb51.net");
console.log(s1.toString());
console.log(s2.toString());
Symbol值的唯一性与比较
借助键名可以方便地区分两个Symbol值。即使两个Symbol值拥有相同的键,它们依然是不相等的:
let s1 = Symbol("本站");
let s2 = Symbol("本站");
console.log(s1 == s2);
上述代码中的两个Symbol值互不相等。
let s = Symbol("本站");
//报错
`antzone ${sym}`
//报错
"antzone" + sym
Symbol的隐式与显式转换
Symbol值无法被隐式转换为字符串类型,具体代码示例如下:
let s = Symbol("本站");
console.log(s.toString());
上述代码尝试将Symbol隐式转换为字符串时会引发错误。不过,我们可以使用显式方式将其转换为字符串类型,具体代码示例如下:
| 方法 | 描述 |
| Symbol.for() | 创建一个Symbol类型的值,但是不会重复创建键值相同的Symbol类型的值。 |
| Symbol.keyFor() | 获取对应Symbol值的键。 |
| Symbol.prototype.toString() | 返回当前symbol对象的字符串表示。 |
Symbol的方法与属性
Symbol类型包含特定的方法和属性: 方法列表如下:
| 方法 | 描述 |
| Symbol.iterator | 内置Symbol值,作为对象属性会指向一个遍历器接口。 |
| Symbol.match | |
| Symbol.prototype | |
| Symbol.species | |
| Symbol.toPrimitive |
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
