Palavras-chave reservadas em JavaScript

Respostas:

1476

Aqui está o meu poema, que inclui todas as palavras-chave reservadas em JavaScript, e é dedicado àqueles que permanecem honestos no momento, e não apenas tentam pontuar:

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.
art4theSould
fonte
5
screenshots.firefox.com/MVw02wDrHPi197kK/stackoverflow.com isso me faz não querer clicar que
Kuba Orlik
61

Para complementar a resposta de benc , consulte o Padrão ECMA-262 . Essas são as palavras reservadas oficiais, mas apenas um pedante ignora a implementação para respeitar o padrão. Para as palavras reservadas das implementações mais populares, que são firefox e internet explorer, consulte a resposta de benc.

As palavras reservadas no EMCAScript-262 são as Palavras - chave s, Palavras Reservadas Futuras , NullLiteral e BooleanLiteral s, onde as Palavras - chave são

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

as futuras palavras reservadas são

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

o NullLiteral é

null

e os BooleanLiteral s são

true
false
Joseph Holsten
fonte
Joseph, obrigado por adicionar essa informação. Encontrei o PDF no google, mas não tive tempo de abrir e ler tudo.
benc
A palavra reservada futura "abstrata" não é mencionada na especificação do ES5 nem no rascunho do ES6. De onde isso veio?
Vladimir Panteleev
2
Encontrei! Ele estava presente no ES3 como uma palavra reservada futura, juntamente com uma longa lista de outros, mas foi removido no ES5.
Vladimir Panteleev
13
Que tipo de resposta é essa. Nem sequer rima.
Gajus
1
Eu não posso ver letaqui, mas eu vejo isso no docu: ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
prosti
20

Eu estava lendo sobre isso em JavaScript e jQuery: The Missing Manual :

Nem todas essas palavras reservadas causarão problemas em todos os navegadores, mas é melhor evitar esses nomes ao nomear variáveis.

JavaScript Palavras-chave: 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 .

Reservado para uso futuro: 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 .

Pré-definido variáveis globais no navegador: alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, window .

sou eu
fonte
Localização usada em um script e comportamento muito estranho, postagem muito útil.
Alimack # 04/11
2
"Reservado para uso futuro" :: Todas as palavras de Java ... são realmente preguiçosas.
Eddie B
2
Observe que “reservado” não é o mesmo que “pré-inicializado”. No navegador, alertjá está inicializado, mas nada impede a sua reatribuição alert = 5. No entanto, você não pode definir windowpara 5, mas pode usá-lo como uma variável local. Isso não é possível com palavras-chave reservadas, uso futuro, null, false, true.
precisa saber é o seguinte
As respostas mais votadas foram perdidas yieldna minha verificação rápida e marcaram com +1. Eles podem ser ativados no ES5.1 pelo modo estrito:implements interface let package private protected public static yield
5

Aqui está uma maneira independente de versão de navegador e idioma para determinar se uma sequência específica é tratada como uma palavra-chave pelo mecanismo JavaScript. Créditos a esta resposta, que fornece o núcleo da solução.

function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}
GOTO 0
fonte
7
Se você precisar usar evalalgo, provavelmente significa que está fazendo errado.
SeinopSys
8
Isso é perfeito para um caso de teste executado em tempo de construção, completamente válido, desde que não seja algo que você tenha exposto no tempo de execução.
Abdullah Jibaly 18/03/2015
3

Nenhuma das respostas atuais avisa que, independentemente do ES-Dialect, os navegadores tendem a ter suas próprias listas de palavras-chave reservadas, métodos etc., além do que o ES exige.

Por exemplo, IE9 proíbe o uso de nomes lógicos como: addFilter, removeFilter(que, entre outros, são métodos reservados).

Consulte http://www.jabcreations.com/blog/internet-explorer-9 para obter uma lista mais extensa 'atualmente conhecida' específica para o IE9. Eu ainda encontrei alguma referência oficial a eles no msdn (ou em outro lugar).

GitaarLAB
fonte
1

Aqui está uma lista do livro 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
starhopperx
fonte
-1

A resposta de benc é excelente, mas para meus dois centavos, gosto da página da w3schools sobre isso:

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

Além de listar as palavras-chave reservadas pelo padrão, ele também possui uma longa lista de palavras-chave que você deve evitar em determinados contextos; por exemplo, não usar o nome alertao escrever o código para ser executado em um navegador. Isso me ajudou a descobrir por que certas palavras estavam destacando como palavras-chave no meu editor, mesmo sabendo que não eram palavras-chave.

Reikim
fonte