推荐答案
在 ECMAScript 6 中,可以使用 Symbol() 函数来创建一个 Symbol。Symbol 是一种原始数据类型,表示独一无二的值。以下是创建 Symbol 的示例代码:
const mySymbol = Symbol();
你也可以为 Symbol 添加一个可选的描述字符串,用于调试目的:
const mySymbol = Symbol('description');本题详细解读
Symbol 的基本概念
Symbol 是 ECMAScript 6 引入的一种新的原始数据类型,表示独一无二的值。Symbol 的主要用途是作为对象属性的键,确保属性名的唯一性,避免属性名冲突。
创建 Symbol
创建 Symbol 的最简单方式是调用 Symbol() 函数,不带任何参数:
const symbol1 = Symbol(); const symbol2 = Symbol(); console.log(symbol1 === symbol2); // false
每次调用 Symbol() 都会生成一个新的、唯一的 Symbol 值,即使它们的描述相同。
添加描述
在创建 Symbol 时,可以传递一个可选的字符串作为描述。这个描述主要用于调试,帮助开发者识别不同的 Symbol:
const symbolWithDescription = Symbol('myDescription');
console.log(symbolWithDescription.toString()); // "Symbol(myDescription)"全局 Symbol 注册表
如果你希望在不同的地方使用同一个 Symbol,可以使用 Symbol.for() 方法。这个方法会在全局 Symbol 注册表中查找具有相同描述的 Symbol,如果找到则返回它,否则创建一个新的 Symbol 并注册到全局注册表中:
const globalSymbol1 = Symbol.for('globalKey');
const globalSymbol2 = Symbol.for('globalKey');
console.log(globalSymbol1 === globalSymbol2); // trueSymbol 作为对象属性
Symbol 可以作为对象的属性键,确保属性名的唯一性:
const obj = {};
const mySymbol = Symbol('myKey');
obj[mySymbol] = 'value';
console.log(obj[mySymbol]); // "value"获取对象的 Symbol 属性
可以使用 Object.getOwnPropertySymbols() 方法获取对象的所有 Symbol 属性:
// www.javascriptcn.com code example
const obj = {};
const symbol1 = Symbol('key1');
const symbol2 = Symbol('key2');
obj[symbol1] = 'value1';
obj[symbol2] = 'value2';
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // [Symbol(key1), Symbol(key2)]Symbol 的不可变性
Symbol 是不可变的,一旦创建就不能被修改。这使得 Symbol 非常适合用作对象属性的键,确保属性名的唯一性和不可变性。