📅  最后修改于: 2023-12-03 14:43:29.762000             🧑  作者: Mango
Symbol() 是 JavaScript 的一种基本数据类型,它是在 ES6 (ECMAScript 2015) 中引入的。它的主要作用是创建唯一的标识符,这些标识符在全局范围内是唯一的,可以用作对象属性的键。
要创建一个 Symbol,可以直接调用 Symbol 函数,不需要使用 new
关键字。
const mySymbol = Symbol();
Symbol 函数可以接受一个可选的描述参数,这个参数只是用于标识 Symbol 的描述,不会影响 Symbol 的唯一性。描述参数主要用于调试和日志记录。
const mySymbol = Symbol('描述');
Symbol 可以作为对象属性的键,用于创建一些特殊的属性,这些属性不会被常规的 object 属性遍历方法遍历到。
const mySymbol = Symbol();
const obj = {};
obj[mySymbol] = '这是一个 Symbol 属性';
console.log(obj[mySymbol]); // 输出: 这是一个 Symbol 属性
console.log(Object.keys(obj)); // 输出: []
Symbol 也可以通过全局的共享注册表来访问和共享,在全局注册表中定义的 Symbol 具有相同的唯一性。
const mySymbol = Symbol.for('mySymbol');
console.log(Symbol.for('mySymbol') === mySymbol); // 输出: true
尽管 Symbol 无法通过 Object.keys()、Object.getOwnPropertyNames() 方法等常规方法获取,但可以使用 Object.getOwnPropertySymbols() 方法来反射获取对象的 Symbol 属性。
const symbol1 = Symbol('symbol1');
const symbol2 = Symbol('symbol2');
const obj = {
[symbol1]: 'Symbol 1',
[symbol2]: 'Symbol 2'
};
console.log(Object.getOwnPropertySymbols(obj)); // 输出: [Symbol(symbol1), Symbol(symbol2)]
通过使用 Symbol(),可以更灵活地定义对象属性,避免属性冲突,为程序员提供了更多的控制力。