ES2015 Symbol 一种绝不重复的值

作者:拾光

时间:2026-10-21

浏览:517

本文介绍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

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章