Какие ключевые слова JavaScript (имена функций, переменные и т. д.) Зарезервированы?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Мы должны ссылаться на фактические источники информации, а не только на самые популярные в Google.
http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Reserved_Words
JScript 8.0: http://msdn.microsoft.com/en-us/library/ttyab5c8.aspx
Чтобы дополнить Бенк ответ, см. Стандартный ECMA-262. Это официальные зарезервированные слова, но только педант игнорирует реализацию в соответствии со стандартом. Зарезервированные слова наиболее популярных реализаций, таких как firefox и internet explorer, см. В ответе benc.
Зарезервированные слова в EMCAScript-262 - это Ключевое словоs, Будущее зарезервированное словоs, NullLiteral и BooleanLiterals, где Ключевые слова
break do instanceof typeof
case else new var
catch finally return void
continue for switch while
debugger function this with
default if throw
delete in try
Будущее зарезервированное слово являются
abstract export interface static
boolean extends long super
byte final native synchronized
char float package throws
class goto private transient
const implements protected volatile
double import public
enum int short
NullLiteral - это
null
и BooleanLiteral являются
true
false
Джозеф, спасибо за добавление этой информации. Я нашел этот PDF-файл в Google, но не успел его все открыть и прочитать.
«Абстрактное» будущее зарезервированное слово не упоминается ни в спецификации ES5, ни в проекте ES6. Откуда это пришло?
Нашел! Оно присутствовало в ES3 как будущее зарезервированное слово вместе с длинным списком других, но было удалено в ES5.
Что это за ответ. Это даже не рифмуется.
Изменился ли Будущие зарезервированные слова? В связанном PDF-файле я не вижу int, bool и т. д. В списке.
Я не вижу здесь let, но я вижу его в документе: ecma-international.org/publications/files/ECMA-ST/Ecma-262.p df
Вот мое стихотворение, которое включает все зарезервированные ключевые слова в JavaScript и посвящено тем, кто остается честным в данный момент, а не просто пытается набрать очки:
Let this long package float,
Goto private class if short.
While protected with debugger case,
Continue volatile interface.
Instanceof super synchronized throw,
Extends final export throws.
Try import double enum?
- False, boolean, abstract function,
Implements typeof transient break!
Void static, default do,
Switch int native new.
Else, delete null public var
In return for const, true, char
…Finally catch byte.
Как насчет yield?
Это стихотворение - легенда! Но, к сожалению, включенные слова были зарезервированы в ES3 (байтовые, длинные и т. д.), Которые больше не зарезервированы в ES5, ES6 и следующих версиях.
Я как раз читал об этом в JavaScript и jQuery: отсутствующее руководство:
Not all of these reserved words will cause problems in all browsers, but it’s best to steer clear of these names when naming variables.
JavaScript keywords:
break, case, catch, continue, debugger, default, delete, do, else, false, finally, for, function, if, in, instanceof, new, null, return, switch, this, throw, true, try, typeof, var, void, while, with.Reserved for future use:
abstract, boolean, byte, char, class, const, double, enum, export, extends, final, float, goto, implements, import, int, interface, let, long, native, package, private, protected, public, short, static, super, synchronized, throws, transient, volatile, yield.Pre-defined global variables in the browser:
alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, window.
Использовал местоположение в скрипте и получил очень странное поведение, очень полезный пост.
"Зарезервировано для использования в будущем" :: Все слова Java ... на самом деле довольно ленивый.
Обратите внимание, что «зарезервировано» - это не то же самое, что «предварительно инициализировано». В браузере alert уже инициализирован, но ничего не мешает переназначить alert = 5. Однако вы не можете установить window на 5, но можете использовать его как локальную переменную. Это невозможно с зарезервированными ключевыми словами, использование в будущем, null, false, true.
Большинство проголосовавших ответов пропустили yield по моей быстрой проверке, так что +1 от меня. В ES5.1 они могут быть активированы в строгом режиме: implementsinterfaceletpackageprivateprotectedpublicstaticyield
Это независимый от браузера и языковой версии способ определить, обрабатывается ли конкретная строка как ключевое слово механизмом JavaScript. Кредиты этот ответ, который обеспечивает ядро решения.
function isReservedKeyword(wordToCheck) {
var reservedWord = false;
if (/^[a-z]+$/.test(wordToCheck)) {
try {
eval('var ' + wordToCheck + ' = 1');
} catch (error) {
reservedWord = true;
}
}
return reservedWord;
}
Если вам нужно использовать eval для чего-либо, это, скорее всего, означает, что вы делаете это неправильно.
Это идеально подходит для выполнения тестового примера во время сборки, полностью допустимо, если это не то, что вы показывали во время выполнения.
Ни один из текущих ответов не предупреждает, что независимо от ES-диалекта браузеры, как правило, имеют свои собственные списки зарезервированных ключевых слов, методов и т. д. В дополнение к тому, что диктует ES.
Например, IE9 запрещает использование логических имен, таких как: addFilter, removeFilter (они, среди прочего, являются зарезервированными методами).
См. http://www.jabcreations.com/blog/internet-explorer-9 для более обширного «известного в настоящее время» списка, специфичного для IE9. Я еще не нашел официальной ссылки на них на msdn (или где-то еще).
Benc ответ отличный, но за мои два цента мне нравится страница w3schools на этом:
http://www.w3schools.com/js/js_reserved.asp
Помимо перечисления ключевых слов, зарезервированных стандартом, в нем также есть длинный список ключевых слов, которых должен избегает в определенных контекстах; например, не использовать имя alert при написании кода для запуска в браузере. Это помогло мне понять, почему определенные слова были выделены как ключевые слова в моем редакторе, хотя я знал, что это не ключевые слова.
Вот список из книги Eloquent JavaScript:
breakcasecatchclassconstcontinuedebuggerdefaultdeletedoelseenumexportextendfalsefinallyforfunctionifimplementsimportininstanceofinterfaceletnewnullpackageprivateprotectedpublicreturnstaticsuperswitchthisthrowtruetrytypeofvarvoidwhilewithyield