📅  最后修改于: 2023-12-03 15:01:45.724000             🧑  作者: Mango
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 内置了一些预定义的符号,用于表示特定的操作。例如,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 编程技能。