在 ES6 中,新增了一种原始数据类型 Symbol
,用于表示独一无二的标识符。它是 JavaScript 中唯一一个不能用 new
来创建实例的类型。
Symbol 类型的基本使用
通过 Symbol()
方法可以创建一个唯一的 Symbol
值:
const sym = Symbol(); console.log(typeof sym); // "symbol"
每个 Symbol
值都是唯一的,即使创建时传入的参数相同也不例外:
const sym1 = Symbol('foo'); const sym2 = Symbol('foo'); console.log(sym1 === sym2); // false
Symbol
类型的主要作用是用于对象的属性名。因为对象的属性名实际上都是字符串,如果多个属性名相同,就会出现覆盖的问题。而通过使用 Symbol
类型的属性名,就能避免这个问题。
-- -------------------- ---- ------- ----- ---- - --------------- ----- --- - -------------- ----- ------ - - ------- ----- ------ -- -- -------------------------- -- ----
Symbol 类型的应用场景
常量定义
在程序中,我们经常需要定义一些常量,这些常量应该是不可改变的。而使用 Symbol
类型定义常量,保证了不同的值之间不会产生任何冲突。
const COLOR_RED = Symbol('red'); const COLOR_GREEN = Symbol('green'); const COLOR_BLUE = Symbol('blue');
类型检查
由于 Symbol
类型的值是唯一的,所以可以用来作为对象的属性名,从而用于类型检查。
-- -------------------- ---- ------- ----- ---- - --------------- ----- ------ - ----------------- - ---------- - ----- - ---------- - ------------------- ----------------- - - ----- - - --- ------------- --------------------- -- ---- ------------- -- ------- ----
手动实现私有属性和方法
在 JavaScript 中,并没有真正的私有属性和方法,所有属性和方法都是公开的。但是通过使用 Symbol
类型的属性名,我们可以实现手动的私有属性和方法。
-- -------------------- ---- ------- ----- ---- - --------------- ----- --- - -------------- ----- ------ - ----------------- ----- ------ - ----------------- ----- ------ - ----------------- ---- ------- - ---------- - ----- --------- - ---- ------------ - ------- ------------ - --------- - ----------- - ------ ------------- - ----------- - ------ ------------- - -------- - ------------ - ---------- - - ----- - - --- ------------ --- ------ --------------- -- ------ - ------------- ----- ------------ --- --------------- ----- --------------- -------- - --------------------------- -- ---- --------------------------- -- -------- ----------- --------------------------- -- ---------
总结
Symbol
类型是 ES6 中新增的一种原始数据类型,用于表示独一无二的标识符。它适用于一些需要独立标识的场景,如对象属性的唯一标识、手动实现私有属性和方法等。掌握 Symbol
类型的使用方式,可以提升代码的可读性和安全性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64659451968c7c53b0641037