Infinity, NaN и undefined: незарезервированное ключевое слово? - PullRequest
2 голосов
/ 20 марта 2020

Документация MDN гласит:

Reserved words actually only apply to Identifiers (vs. IdentifierNames) . As described in es5.github.com/#A.1, these are all IdentifierNames which do not exclude ReservedWords

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords

Однако список зарезервированных ключевых слов не включает идентификаторы Infinity, NaN и undefined.

Похоже, они действуют как ключевые слова. Почему они называются идентификаторами, а не зарезервированными ключевыми словами?

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

undefined, NaN и Infinity на самом деле свойства глобального объекта.

Смотрите мой полный ответ здесь

0 голосов
/ 20 марта 2020

Все они являются свойствами глобального объекта, но они не зарезервированы; вы можете синтаксически объявлять переменные с этими именами (если только вы не на верхнем уровне - на верхнем уровне идентификаторы ссылаются на значения глобального объекта и не могут быть переназначены):

console.log(
  window.hasOwnProperty('undefined'),
  window.hasOwnProperty('NaN'),
  window.hasOwnProperty('Infinity'),
);
(() => {
  const undefined = 'foo';
  const NaN = 'bar';
  const Infinity = 'baz';
  console.log('No error');
})();

Зарезервированные ключевые слова, с другой стороны, не могут использоваться в качестве идентификаторов (имен переменных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...