什么是 Symbol
Symbol 是一种新的基本数据类型,它能够作为对象的唯一属性名(即所谓的私有属性名),这样就避免了对象属性名之间的冲突。具体来说,Symbol 类型的变量是一个独一无二的值,而且不会与其他的任何值相等。
Symbol 的使用
Symbol 值通过 Symbol()
函数生成,如下所示:
const sym = Symbol(); console.log(typeof sym); // "symbol"
Symbol 变量通常用于对象属性的私有名称:
// javascriptcn.com 代码示例 const myObj = {}; const name = Symbol('name'); myObj[name] = '张三'; const age = Symbol('age'); myObj[age] = 18; console.log(myObj[name]); // "张三" console.log(myObj[age]); // 18
在上面的代码中,name
和 age
都是 Symbol 类型的变量,用于作为 myObj
的属性名。这样就避免了其他属性名与 name
和 age
冲突的可能性。
Symbol 的应用
1. 使用 Symbol 创建常量
由于 Symbol 值不会重复,因此可以将其用作变量名称,以创建常量:
// javascriptcn.com 代码示例 const DAYS = { MONDAY: Symbol('MONDAY'), TUESDAY: Symbol('TUESDAY'), WEDNESDAY: Symbol('WEDNESDAY'), THURSDAY: Symbol('THURSDAY'), FRIDAY: Symbol('FRIDAY'), SATURDAY: Symbol('SATURDAY'), SUNDAY: Symbol('SUNDAY') }; console.log(DAYS.MONDAY); // Symbol(MONDAY)
2. 使用 Symbol 创建类的私有方法
由于 Symbol 变量不会重复,因此可以用它们创建类的私有方法,以避免方法名的冲突。
// javascriptcn.com 代码示例 const _log = Symbol('log'); class MyClass { [_log](text) { console.log(text.toUpperCase()); } sayHello() { this[_log]('Hello World!'); } } const myObj = new MyClass(); myObj.sayHello(); // "HELLO WORLD!"
在上面的代码中,_log
是一个 Symbol 类型的变量,用于创建 MyClass
的私有方法。这个方法不能被外部访问,只能通过 sayHello()
方法调用。
总结
Symbol 是一个新的基本数据类型,它能够作为对象的唯一属性名,避免了对象属性名之间的冲突。Symbol 变量通常用于对象属性的私有名称、创建常量和类的私有方法。在合适的场景下使用 Symbol 可以提高代码的健壮性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653b22187d4982a6eb574b8c