Как работает Symbol.keyFor ()? - PullRequest
0 голосов
/ 12 мая 2018

Для приведенного ниже кода

let obj = {
    [Symbol('my_key')]: 1,
    enum: 2,
    nonEnum: 3
}

document.write(Symbol.keyFor(Symbol.for('my_key')) + '<br>'); //  retrieves 'my_key'
document.write(Symbol.keyFor(Object.getOwnPropertySymbols(obj)[0])); //  does not retrieve 'my_key'

ниже выводится:

my_key
undefined

Почему Symbol.keyFor() не получает строку токена во втором случае?

1 Ответ

0 голосов
/ 12 мая 2018

С MDN :

Метод Symbol.keyFor (sym) извлекает общий ключ символа из глобального реестра символов для данного символа.

В первом случае вы используете глобальный символ, но в качестве ключа объекта используете локальный символ:

// local symbol
Symbol('my_key')

// global symbol
Symbol.for('my_key')

Когда вы используете глобальный символ в литерале объекта, он будет работать так, как вы ожидаете:

let obj = {
    [Symbol.for('my_key')]: 1,
    enum: 2,
    nonEnum: 3
}

Глобальные символы хранятся в глобальном реестре символов. Как вы храните местные символы, зависит от вас. Здесь демонстрируется разница между ними:

Symbol('my_key') === Symbol('my_key') // false
Symbol.for('my_key') === Symbol.for('my_key') // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...