Palavras reservadas do Javascript

Conceito

Muito foi feito em javascript, mas o problema de erros de script serem exibidos apenas na sua execução ainda pega muita gente e muitas vezes perdemos muito tempo depurando um erro. IDEs inovadoras como o Visual Studio Community Edition já possuem dentro de si a sintaxe correta do JavaScript e conseguem detectar erros no momento da escrita do código. Uma mão na roda. Pena que não são todos editores que tem esse recurso. Aliás o principal empecilho de usar o JavaScript em sites modernos é a Produtividade, ou seja, o custo de desenvolvimento.

Costumamos escrever muita coisa no JavaScript de acordo com as nossas necessidades e algumas vezes nos esquecemos que algumas palavras não podem ser usadas porque o JavaScript as usa para finalidade própria.

Por exemplo se você usar uma palavra reservada do javascript como identificador de um item terá um erro de execução. Lembre-se que erros na estutura da página HTML são ignorados pelo HTML mas erros de JavaScript aborta tudo que seria feito no código seguinte e nem sempre o erro é visável fora do depurador do browser.

Palavras reservadas têm um significado específico na linguagem JavaScript, pois fazem parte da sintaxe da linguagem. Usar uma palavra reservada como nome de variável, por exemplo, causa um erro de compilação durante o carregamento do script.  

Note que pode ser que numa versão do JavaScript a funcionalidade não apresente erro algum mas numa nova versão do JavaScript ( EcmaScript ) apareça um erro que cancele o script. Se quiser dar uma olhada nas definições da linguagem visite o site da Mozzila.Org. Note que a entidade define o padrão mas os fabricantes do browser que se encarregam de colocar a funcionalidade no browser. Por isso essa confusão do que funciona e o que não funciona no browser.

Ao escolher identificadores, também é importante evitar palavras que já representem os nomes de objetos ou funções JavaScript intrínsecas, como String ou parseInt.


Em JavaScript, Você não pode usar as palavras reservadas para nomear variáveis, rótulos ou nomes de funções:

Lista das chaves reservadas do Javascript

abstract arguments await* boolean
break byte case catch
char class* const continue
debugger default delete do
double else enum* eval
export* extends* false final
finally float for function
goto if implements import*
in instanceof int interface
let* long native new
null package private protected
public return short static
super* switch synchronized this
throw throws transient true
try typeof var void
volatile while with yield

As palavras marcadas com * são novas no ECMAScript 5 e 6.


As seguintes palavras abaixo foram removidas das palavras reservadas do padrão ECMAScript 5/6 ou a palavra foi mantida mas a funcionalidade completamente alterada:

Palavras reservadas removidas

abstract boolean byte char
double final float goto
int long native short
synchronized throws transient volatile

Verifique se o seu navegador tem suporte ao ECMAScript 5/6. Muitos tem mas ainda parcial.


Você também deve evitar usar o nome de objetos, propriedades e métodos internos do JavaScript :

JavaScript Objetos, Propriedades e Métodos

Array Date eval function
hasOwnProperty Infinity isFinite isNaN
isPrototypeOf length Math NaN
name Number Object prototype
String toString undefined valueOf

JavaScript pode ser usado como a linguagem de programação em muitos aplicativos usando o recurso web-view ou mesmo um Node-JS.


Você também deve evitar usar o nome dos objetos e propriedades do DOM ( especialmente dos objetos HTML e Window ):

Outras palavras Reservadas

alert all anchor anchors
area assign blur button
checkbox clearInterval clearTimeout clientInformation
close closed confirm constructor
crypto decodeURI decodeURIComponent defaultStatus
document element elements embed
embeds encodeURI encodeURIComponent escape
event fileUpload focus form
forms frame innerHeight innerWidth
layer layers link location
mimeTypes navigate navigator frames
frameRate hidden history image
images offscreenBuffering open opener
option outerHeight outerWidth packages
pageXOffset pageYOffset parent parseFloat
parseInt password pkcs11 plugin
prompt propertyIsEnum radio reset
screenX screenY scroll secure
select self setInterval setTimeout
status submit taint text
textarea top unescape untaint
window

Além disso, você deve evitar o uso do nome de todos os manipuladores de eventos HTML.


HTML - Manipuladores de Eventos

onblur onclick onerror onfocus
onkeydown onkeypress onkeyup onmouseover
onload onmouseup onmousedown onsubmit


Nem precisamos dizer que as palavras e funções pré-definidas do JavaScript não podem ser usados.

Funções pré-definidas JavaScript

eval() : O método eval() avalia código JavaScript representado como uma string.

uneval() : O método uneval() cria uma representação de string do código-fonte de um Object.

isFinite() : A função global isFinite() determina se o valor passado é um número finito. Se necessário, o parâmetro é primeiro convertido para um número.

isNaN() : A função isNaN() determina se um valor é NaN ou não. Nota: coerção dentro da função isNaN tem regras interessantes; você pode, alternativamente, querer usar Number.isNaN(), como definido no ECMAScript 6, ou você pode usar typeof para determinar se o valor não é um número.

parseFloat() : A função parseFloat() analisa um argumento do tipo string e retorna um número de ponto flutuante.

parseInt(): A função parseInt() analisa um argumento do tipo string e retorna um inteiro da base especificada (base do sistema numérico).

decodeURI() : A função decodeURI() decodifica uma Uniform Resource Identifier (URI) criada anteriormente por encodeURI ou por uma rotina similar.

decodeURIComponent() : O método decodeURIComponent() decodifica um componente Uniform Resource Identifier (URI) criado anteriormente por encodeURIComponent ou por uma rotina similar.

encodeURI() : O método encodeURI() codifica um Uniform Resource Identifier (URI), substituindo cada ocorrência de determinados caracteres por um, dois, três, ou quatro sequências de escape que representa a codificação UTF-8 do caracter (só serão quatro sequências de escape para caracteres compostos de dois caracteres "substitutos").

encodeURIComponent() : O método encodeURIComponent() codifica um componente Uniform Resource Identifier (URI), substituindo cada ocorrência de determinados caracteres por um, dois, três, ou quatro sequências de escape que representa a codificação UTF-8 do caracter (só serão quatro sequências de escape para caracteres compostos de dois caracteres "substitutos").

escape() : O método obsoleto escape() calcula uma nova string na qual certos caracteres foram substituídos por uma sequência de escape hexadecimal. Use encodeURI ou encodeURIComponent em vez disso.

unescape(): O método obsoleto unescape() calcula uma nova string na qual sequências de escape hexadecimais são substituídas pelo caractere que ela representa. As sequências de escape podem ser introduzidas por uma função como escape. Por unescape() estar obsoleto, use decodeURI() ou decodeURIComponent ao invés


Futuro do JavaScript

Seo HTML está em constante evolução, o JavaScript também e visando o futuro há uma lista de palavras reservadas que serão usadas futuramente. Estas palavras não fazem parte atualmente da linguagem JavaScript, mas não devem ser usadas porque no futuro o JavaScript pretende usá-las.

Para obter mais informações sobre palavras-chave reservadas futuras no JavaScript, consulte JavaScript Palavras reservadas futuras.