> For the complete documentation index, see [llms.txt](https://yyaozhibo.gitbook.io/qian-duan-xue-xi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yyaozhibo.gitbook.io/qian-duan-xue-xi/js/es6-gang-xu/symbol/symbol.for-he-symbol.keyfor.md).

# Symbol.for() 和 Symbol.keyFor()

## `Symbol.for()`

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

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

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

## `Symbol.forKey()`&#x20;

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

```javascript
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 值登记的名字，是全局环境的，不管有没有在全局环境运行。
