В JavaScript есть слова, которые принадлежат самому языку. Синтаксический анализатор использует их для сборки конструкций, поэтому объявить переменную с таким именем не получится — JS сразу выбросит
SyntaxError.Все ключевые слова можно условно разделить на три категории:
1. Действующие ключевые слова
Слова, которые прямо сейчас задают логику и структуры данных:
break, case, catch, class, const, continue, debugger, default, delete, do, else, export, extends, false, finally, for, function, if, import, in, instanceof, new, null, return, super, switch, this, throw, true, try, typeof, var, void, while, with.2. Будущие зарезервированные слова
Они припасены для возможных следующих версий ECMAScript. Использовать их в качестве идентификаторов (имен переменных или функций) нельзя уже сейчас:
* В обычном режиме:
enum.* В Строгом режиме (`"use strict"`):
implements, interface, let, package, private, protected, public, static, yield.3. Contextual Keywords (Контекстные слова)
Работают как ключевые только в определённом контексте, но вне его могут быть именами переменных:
*
async / await (внутри асинхронных функций)*
get / set (в описании геттеров и сеттеров)*
of (в цикле `for...of`)*
target (в `new.target`)Тонкие моменты и подвохи
* Ключи объектов разрешены: С выходом ES6 ключевые слова можно свободно использовать в качестве имен свойств объектов:
const config = {
class: 'btn-primary', // Легально
for: 'user-input', // Легально
return: true // Легально
};
console.log(config.class);
* Разница между `undefined` и `null`:
null — это зарезервированное ключевое слово, его нельзя переопределить. А вот undefined — это глобальное свойство, а не слово. В старых версиях JS undefined можно было случайно переписать (`var undefined = 10;`), хотя в строгом режиме это, к счастью, уже запрещено.#js
