📜  JavaScript 符号完整参考(1)

📅  最后修改于: 2023-12-03 15:01:45.724000             🧑  作者: Mango

JavaScript 符号完整参考

介绍

JavaScript 是一种广泛使用的编程语言,用于为网页增加交互性和动态性。在 JavaScript 中,符号(Symbols)是一种新的原始数据类型,引入了 ES6(ECMAScript 2015)标准中,并在以后的版本中得到了扩展。符号是唯一且不可变的,可以用作对象属性的键。

本参考指南将介绍 JavaScript 符号的完整内容。

符号的创建

可以使用 Symbol() 函数来创建一个新的符号。

const symbol = Symbol();
console.log(symbol); // Symbol()

符号也可以接受一个可选的字符串作为参数,用于描述符号的名称。

const symbolWithName = Symbol('mySymbol');
console.log(symbolWithName); // Symbol(mySymbol)

每个通过 Symbol() 创建的符号都是唯一的,即使它们具有相同的描述语句。

符号的用途

符号具有以下用途:

对象属性键

符号可以用作对象属性的键,以确保属性名称的唯一性。使用符号作为键时,属性不会出现在常规的遍历中。

const symbol = Symbol('mySymbol');
const obj = {
  [symbol]: 'value'
};

console.log(obj[symbol]); // value
console.log(Object.keys(obj)); // []
console.log(Object.getOwnPropertyNames(obj)); // []
console.log(Object.getOwnPropertySymbols(obj)); // [ Symbol(mySymbol) ]
避免命名冲突

由于符号是唯一的,可以用它们来避免命名空间冲突。当多个模块使用相同的符号作为键时,它们不会相互干扰。

JavaScript 内置符号

JavaScript 内置了一些预定义的符号,用于表示特定的操作。例如,Symbol.iterator 用于定义迭代器对象的默认迭代行为。

const arr = [1, 2, 3];
const iterator = arr[Symbol.iterator]();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
符号的属性和方法

符号是一个特殊的原始数据类型,有一些内建的属性和方法可用。

属性
  • Symbol.length: Symbol 构造函数的长度属性,值为 1。
方法
  • Symbol.for(string): 根据提供的字符串创建或返回一个全局共享的符号。
  • Symbol.keyFor(symbol): 返回一个已注册的全局共享符号的描述符,与提供的符号关联。
示例

以下是一些使用符号的示例:

使用符号作为对象属性的键
const symbol = Symbol('mySymbol');
const obj = {
  [symbol]: 'value',
  name: 'John'
};

console.log(obj[symbol]); // value
console.log(obj.name); // John
创建共享的全局符号
const symbol1 = Symbol.for('mySymbol');
const symbol2 = Symbol.for('mySymbol');

console.log(symbol1 === symbol2); // true
使用内置符号
const arr = [1, 2, 3];
const iterator = arr[Symbol.iterator]();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
结论

JavaScript 的符号提供了一种唯一且不可变的数据类型,用于表示属性键和避免命名冲突。通过本参考指南,你应该对 JavaScript 中的符号有一个全面的了解,并能运用符号来扩展你的 JavaScript 编程技能。