Symbol.for() 和 Symbol.keyFor()

Symbol.for()

Symbol.for()Symbol() 不同的是 Symbol() 每次都会返回一个新的 symbol 值,而 Symbol.for() 会先检查有没有以该参数作为名称的 symbol 值,若有则返回返回该值,若没有则创建、登记,然后返回一个新的 symbol

let a = Symbol.for('test')
let b = Symbol.for('test')

console.log(a === b) // true

Symbol.forKey()

这个方法的作用是,检查当前是否有以输入参数为名称的且已登记的 Symbol 值,如果有则返回对应的 symbol 值,如果没有则返回 undefined

const a = Symbol('test')
const b = Symbol.for('test_2')

console.log(Symbol.keyFor(a)) // undefined
console.log(Symbol.keyFor(b)) // test_2

注意,Symbol.for()为 Symbol 值登记的名字,是全局环境的,不管有没有在全局环境运行。

Last updated