📜  js symbole() - Javascript (1)

📅  最后修改于: 2023-12-03 14:43:29.762000             🧑  作者: Mango

JS Symbol()

介绍

Symbol() 是 JavaScript 的一种基本数据类型,它是在 ES6 (ECMAScript 2015) 中引入的。它的主要作用是创建唯一的标识符,这些标识符在全局范围内是唯一的,可以用作对象属性的键。

用法

要创建一个 Symbol,可以直接调用 Symbol 函数,不需要使用 new 关键字。

const mySymbol = Symbol();

Symbol 函数可以接受一个可选的描述参数,这个参数只是用于标识 Symbol 的描述,不会影响 Symbol 的唯一性。描述参数主要用于调试和日志记录。

const mySymbol = Symbol('描述');
Symbol 作为对象属性的键

Symbol 可以作为对象属性的键,用于创建一些特殊的属性,这些属性不会被常规的 object 属性遍历方法遍历到。

const mySymbol = Symbol();
const obj = {};

obj[mySymbol] = '这是一个 Symbol 属性';

console.log(obj[mySymbol]);  // 输出: 这是一个 Symbol 属性
console.log(Object.keys(obj));  // 输出: []
全局 Symbol 注册

Symbol 也可以通过全局的共享注册表来访问和共享,在全局注册表中定义的 Symbol 具有相同的唯一性。

const mySymbol = Symbol.for('mySymbol');

console.log(Symbol.for('mySymbol') === mySymbol);  // 输出: true
反射 Symbol 属性

尽管 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() 是 JavaScript 的基本数据类型,用于创建唯一的标识符。
  • Symbol 作为对象属性的键,可以创建特殊属性,不会被常规属性遍历方法遍历到。
  • 可以通过全局 Symbol 注册表来共享和访问 Symbol。
  • 使用 Object.getOwnPropertySymbols() 方法可以反射获取对象的 Symbol 属性。

通过使用 Symbol(),可以更灵活地定义对象属性,避免属性冲突,为程序员提供了更多的控制力。