Зарезервированные ключевые слова в JavaScript

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


person titanous    schedule 25.08.2008    source источник
comment
mathiasbynens.be/notes/reserved-keywords   -  person Mathias Bynens    schedule 03.09.2014


Ответы (8)


Мы должны ссылаться на фактические источники информации, а не только на самые популярные поисковые запросы 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

person Community    schedule 13.09.2008

Вот мое стихотворение, которое включает в себя все зарезервированные ключевые слова в 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.
person art4theSould    schedule 24.08.2012
comment
Как насчет yield? - person Pang; 05.08.2020
comment
Это стихотворение-легенда! Но, к сожалению, включенные слова были зарезервированы в ES3 (byte, long и т. д.), которые больше не зарезервированы в ES5, ES6 и последующих версиях. - person Tigran Petrosyan; 28.01.2021

Чтобы дополнить ответ Benc, см. Стандарт ECMA-262. Это официальные зарезервированные слова, но только педант игнорирует реализацию, чтобы соблюдать стандарт. Зарезервированные слова самых популярных реализаций, то есть Firefox и Internet Explorer, см. в ответе benc.

Зарезервированными словами в EMCAScript-262 являются Keyword, Future Reserved Word, NullLiteral и BooleanLiteral. , где Ключевые слова

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
person Joseph Holsten    schedule 29.09.2008
comment
Джозеф, спасибо за добавление этой информации. Я нашел этот PDF в Google, но не было времени открыть и прочитать его все. - person benc; 03.10.2008
comment
Абстрактное будущее зарезервированное слово не упоминается ни в спецификации ES5, ни в проекте ES6. Откуда это пришло? - person Vladimir Panteleev; 06.10.2013
comment
Нашел! Оно присутствовало в ES3 как будущее зарезервированное слово вместе с длинным списком других, но было удалено в ES5. - person Vladimir Panteleev; 06.10.2013
comment
Что это за ответ. Это даже не рифмуется. - person Gajus; 13.12.2014
comment
Изменились ли будущие зарезервированные слова? В связанном PDF я не вижу int или bool и т. д. в списке. - person Sebastian Simon; 22.04.2015
comment
Я не вижу здесь let, но вижу его в документе: ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - person prosti; 30.09.2016

Я только что читал об этом в JavaScript и jQuery: Отсутствует руководство:

Не все эти зарезервированные слова вызовут проблемы во всех браузерах, но при именовании переменных лучше не использовать эти имена.

Ключевые слова JavaScript: 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.

Зарезервировано для использования в будущем: 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.

Предопределенные глобальные переменные в браузере: alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, window.

person its_me    schedule 20.05.2013
comment
Использовал местоположение в скрипте и получил очень странное поведение, очень полезный пост. - person alimack; 04.11.2013
comment
Зарезервировано для будущего использования :: Все слова Java... на самом деле довольно ленивы. - person Edward J Beckett; 29.08.2014
comment
Обратите внимание, что «зарезервировано» — это не то же самое, что «предварительно инициализировано». В браузере alert уже инициализирован, но ничто не мешает переназначить alert = 5. Однако вы не можете установить window равным 5, но вы можете использовать его как локальную переменную. Это невозможно с зарезервированными ключевыми словами для использования в будущем, null, false, true. - person Ruben Verborgh; 03.09.2014
comment
Ответы с большим количеством голосов пропустили yield при моей быстрой проверке, поэтому +1 от меня. В ES5.1 их можно активировать в строгом режиме: implements interface let package private protected public static yield - person ; 24.06.2019

Вот независимый от версии браузера и языка способ определить, обрабатывается ли конкретная строка как ключевое слово движком JavaScript. Кредиты на этот ответ, который обеспечивает основу решения.

function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}
person GOTO 0    schedule 18.03.2015
comment
Если вам нужно использовать eval для чего-либо, это, скорее всего, означает, что вы делаете это неправильно. - person SeinopSys; 18.03.2015
comment
Это идеально подходит для запуска тестового примера во время сборки, полностью допустимо, если это не то, что вы выставили во время выполнения. - person Abdullah Jibaly; 18.03.2015

Ни один из текущих ответов не предупреждает, что независимо от ES-диалекта браузеры, как правило, имеют свои собственные списки зарезервированных ключевых слов, методов и т. д. в дополнение к тому, что диктует ES.

Например, IE9 запрещает использование логических имен типа: addFilter, removeFilter (они, среди прочего, являются зарезервированными методами).

См. http://www.jabcreations.com/blog/internet-explorer-9 для более обширного «известного в настоящее время» списка, специфичного для IE9. Я еще не нашел официальной ссылки на них в msdn (или где-либо еще).

person GitaarLAB    schedule 08.05.2015

Вот список из книги Eloquent JavaScript:

  • break
  • case
  • catch
  • class
  • const
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • enum
  • export
  • extend
  • false
  • finally
  • for
  • function
  • if
  • implements
  • import
  • in
  • instanceof
  • interface
  • let
  • new
  • null
  • package
  • private
  • protected
  • public
  • return
  • static
  • super
  • switch
  • this
  • throw
  • true
  • try
  • typeof
  • var
  • void
  • while
  • with
  • yield
person starhopperx    schedule 19.11.2017

ответ benc отличный, но за мои два цента мне нравится страница w3schools:

http://www.w3schools.com/js/js_reserved.asp

В дополнение к списку ключевых слов, зарезервированных стандартом, в нем также есть длинный список ключевых слов, которые вам следует избегать в определенных контекстах; например, не использовать имя alert при написании кода для запуска в браузере. Это помогло мне понять, почему определенные слова выделялись как ключевые слова в моем редакторе, хотя я знал, что они не были ключевыми словами.

person Reikim    schedule 24.03.2016