JavaScript
(frequentemente abreviado como JS) e uma
linguagem de programacao
interpretada
estruturada
, de script em alto nivel com
tipagem
dinamica
fraca
e
multiparadigma
(prototipos, orientado a objeto, imperativo e funcional).
[
2
]
[
3
]
Juntamente com
HTML
e
CSS
, o JavaScript e uma das tres principais tecnologias da World Wide Web. JavaScript permite paginas da Web interativas e, portanto, e uma parte essencial dos aplicativos da web. A grande maioria dos sites usa, e todos os principais navegadores tem um mecanismo JavaScript dedicado para executa-lo.
[
4
]
E atualmente a principal
linguagem para programacao
client-side
em navegadores web. E tambem bastante utilizada do lado do servidor atraves de ambientes como o
node.js
.
Como uma linguagem multiparadigma, o JavaScript suporta estilos de programacao orientados a eventos, funcionais e imperativos (incluindo orientado a objetos e prototype-based), apresentando recursos como fechamentos (closures) e funcoes de alta ordem comumente indisponiveis em linguagens populares como
Java
e
C++
. Possui APIs para trabalhar com texto, matrizes, datas, expressoes regulares e o DOM, mas a linguagem em si nao inclui nenhuma E/S, como instalacoes de rede, armazenamento ou graficos, contando com isso no ambiente host em que esta embutido.
Foi originalmente implementada como parte dos
navegadores
web para que scripts pudessem ser executados do lado do cliente e interagissem com o usuario sem a necessidade deste script passar pelo servidor, controlando o navegador, realizando comunicacao assincrona e alterando o conteudo do documento exibido, porem os mecanismos JavaScript agora estao incorporados em muitos outros tipos de software host, incluindo em servidores e bancos de dados da Web e em programas que nao sao da Web, como processadores de texto e
PDF
, e em
tempo de execucao
ambientes que disponibilizam JavaScript para escrever aplicativos moveis e de desktop, incluindo widgets de area de trabalho.
Os termos Vanilla JavaScript e Vanilla JS se referem ao JavaScript nao estendido por qualquer estrutura ou biblioteca adicional. Scripts escritos em Vanilla JS sao codigos JavaScript simples.
[
5
]
[
6
]
Embora existam semelhancas entre JavaScript e
Java
, incluindo o nome da linguagem, a sintaxe e as respectivas bibliotecas padrao, as duas linguagens sao distintas e diferem muito no design; JavaScript foi influenciado por linguagens de programacao como
Self
e
Scheme
.
[
7
]
E baseada em
ECMAScript
, padronizada pela
Ecma international
nas especificacoes ECMA-262
[
8
]
e ISO/IEC 16262.
Em 1993, o
Centro Nacional de Aplicacoes de Supercomputacao
(NCSA), uma unidade da
Universidade de Illinois
em Urbana-Champaign, lancou o
NCSA Mosaic
, o primeiro navegador grafico popular da Web, que desempenhou um papel importante na expansao do crescimento da nascente
World Wide Web
alem do nicho
NeXTSTEP
onde a World Wide Web havia se formado tres anos antes. Em 1994, uma empresa chamada
Mosaic Communications
foi fundada em
Mountain View
, na California, e empregou muitos dos autores originais do NCSA Mosaic para criar o Mosaic Netscape. No entanto, nao compartilhou intencionalmente nenhum codigo com o NCSA Mosaic. O codinome interno do navegador da empresa era Mozilla, uma juncao de "Mosaic and
Godzilla
". A primeira versao do navegador da Web, Mosaic Netscape 0.9, foi lancada no final de 1994. Em quatro meses, ja havia conquistado tres quartos do mercado de navegadores e se tornado o principal navegador da Web nos anos 90. Para evitar problemas de propriedade de marca registrada com o NCSA, o navegador foi posteriormente renomeado para
Netscape Navigator
no mesmo ano, e a empresa assumiu o nome de
Netscape Communications
. A Netscape Communications percebeu que a Web precisava se tornar mais dinamica.
Marc Andreessen
, o fundador da empresa, acreditava que o
HTML
precisava de uma "linguagem de cola" que fosse facil de usar por Web designers e programadores de meio periodo para montar componentes como imagens e plugins, onde o codigo poderia ser escrito diretamente na Web.
[
9
]
Em 1995, a
Netscape Communications
recrutou
Brendan Eich
com o objetivo de incorporar a linguagem de programacao
Scheme
em seu
Netscape Navigator
.
[
10
]
Antes que ele pudesse comecar, a Netscape Communications colaborou com a
Sun Microsystems
para incluir na linguagem de programacao mais estatica do Netscape Navigator Sun,
Java
, a fim de competir com a
Microsoft
pela adocao de tecnologias e plataformas da Web.
[
11
]
A
Netscape Communications
decidiu entao que a linguagem de script que eles queriam criar complementaria o
Java
e deveria ter uma sintaxe semelhante, o que excluia a adocao de outras linguagens como
Perl
,
Python
,
TCL
ou
Scheme
. Para defender a ideia do JavaScript contra propostas concorrentes, a empresa precisava de um prototipo.
Eich
escreveu um em 10 dias, em maio de 1995.
Embora tenha sido desenvolvido sob o nome Mocha, a linguagem foi oficialmente chamada de LiveScript quando foi lancada em versoes beta do Netscape Navigator 2.0 em setembro de 1995, mas foi renomeada para JavaScript
[
12
]
quando foi lancada no Netscape Navigator 2.0 beta 3 Dezembro.
[
13
]
A escolha final do nome causou confusao, dando a impressao de que a linguagem era uma derivacao da linguagem de programacao Java, e a escolha foi caracterizada como uma manobra de marketing da Netscape para dar ao JavaScript o status da linguagem da moda, o Java.
Ha um equivoco comum de que o JavaScript foi influenciado por uma linguagem de script de pagina da Web desenvolvida pelo Nombas chamada Cmm (nao confundir com o C posteriormente - criado em 1997).
[
14
]
Brendan Eich
, no entanto, nunca tinha ouvido falar de Cmm antes de criar o LiveScript.
[
15
]
Os Nombas lancaram seus scripts de pagina da Web incorporados no
Netscape
, embora o script de pagina da Web nao fosse um conceito novo, conforme mostrado pelo navegador da Web
ViolaWWW
. Nombas mais tarde passou a oferecer JavaScript em vez de Cmm em seu produto ScriptEase e fazia parte do grupo TC39 que padronizava o ECMAScript.
[
16
]
Em dezembro de 1995, logo depois de lancar o JavaScript para navegadores, a Netscape introduziu uma implementacao da linguagem para scripting server-side com o Netscape Enterprise Server.
[
17
]
Desde 1996, o servidor da Web do IIS tem suportado a implementacao do JavaScript - JScript do lado do servidor - em paginas ASP e .NET.
[
18
]
Desde meados da decada de 2000, foram introduzidas implementacoes adicionais de JavaScript no lado do servidor, como o
Node.js
em 2009.
[
19
]
O
TypeScript
e uma linguagem de programacao que adiciona tipagem ao JavaScript, sendo popular para uso no back-end.
[
20
]
As tecnologias de script da
Microsoft
, incluindo
VBScript
e
JScript
, foram lancadas em 1996. JScript, uma implementacao de
engenharia reversa
do JavaScript da Netscape, fazia parte do
Internet Explorer 3
. O JScript tambem estava disponivel para scripts do servidor no Internet Information Server. O Internet Explorer 3 tambem incluiu o primeiro suporte da Microsoft para
CSS
e varias extensoes para
HTML
, mas em cada caso a implementacao era visivelmente diferente daquela encontrada no Netscape Navigator na epoca.
[
21
]
Essas diferencas tornaram dificil para os designers e programadores fazerem um unico site funcionar bem em ambos os navegadores, levando ao uso dos logotipos "melhor visualizado no Netscape" e "melhor visualizado no Internet Explorer" que caracterizaram esses primeiros anos de guerras de navegadores. O JavaScript comecou a adquirir a reputacao de ser um dos obstaculos a uma Web de plataforma cruzada e baseada em padroes. Alguns desenvolvedores assumiram a dificil tarefa de tentar fazer com que seus sites funcionassem em ambos os principais navegadores, mas muitos nao podiam arcar com o tempo.
[
21
]
Com o lancamento do
Internet Explorer 4
, a
Microsoft
introduziu o conceito de
HTML
Dinamico, mas as diferencas nas implementacoes de linguagem e nos diferentes e proprietarios Modelos de Objeto de Documento permaneceram e foram obstaculos a adocao generalizada de JavaScript na Web.
Em novembro de 1996, a Netscape submeteu o JavaScript a
ECMA International
para criar uma especificacao padrao, que outros fornecedores de navegador poderiam implementar com base no trabalho feito na Netscape. Isso levou ao lancamento oficial da especificacao de linguagem ECMAScript publicada na primeira edicao da norma ECMA-262 em junho de 1997, sendo o JavaScript a mais conhecida das implementacoes.
ActionScript
e
JScript
eram outras implementacoes bem conhecidas do
ECMAScript
.
O lancamento do ECMAScript 2 em junho de 1998 deu continuidade ao ciclo de processo de padroes, conforme algumas modificacoes do padrao internacional ISO / IEC 16262. ECMAScript 3 foi lancado em dezembro de 1999 e e a linha de base moderna para JavaScript. O trabalho original do ECMAScript 4 liderado por Waldemar Horwat (entao na Netscape, agora no Google) comecou em 2000. A Microsoft inicialmente participou e implementou algumas propostas em sua linguagem
JScript .NET
.
Com o tempo, ficou claro que a
Microsoft
nao tinha intencao de cooperar ou implementar o JavaScript adequado no
Internet Explorer
, mesmo que eles nao tivessem uma proposta concorrente e tivessem uma implementacao parcial (e divergente neste ponto) no lado do servidor .NET. Entao, em 2003, o trabalho original do ECMAScript 4 foi desativado.
O proximo grande evento foi em 2005, com dois grandes acontecimentos na historia do JavaScript. Primeiro, Brendan Eich e Mozilla juntaram-se novamente a Ecma International como um membro sem fins lucrativos e comecaram a trabalhar no ECMAScript para
XML
(E4X), o padrao ECMA-357, que veio de ex-funcionarios da Microsoft na
BEA Systems
(originalmente adquirida como Crossgain) . Isso levou a trabalhar em conjunto com a
Macromedia
(posteriormente adquirida pela Adobe Systems), que estava implementando o E4X no ActionScript 3 (o ActionScript 3 era um fork do ECMAScript 4 original).
Assim, juntamente com a Macromedia, o trabalho foi reiniciado no ECMAScript 4 com o objetivo de padronizar o que estava no ActionScript 3. Para isso, a
Adobe Systems
lancou a ActionScript Virtual Machine 2, codinome Tamarin, como um projeto de
codigo aberto
. Mas Tamarin e ActionScript 3 eram muito diferentes do JavaScript da web para convergir, como foi realizado pelas partes em 2007 e 2008.
Ainda havia turbulencia entre os varios jogadores;
Douglas Crockford
? entao no
Yahoo!
? juntou forcas com a Microsoft em 2007 para se opor ao ECMAScript 4, o que levou ao esforco do ECMAScript 3.1. O desenvolvimento do ECMAScript 4 nunca foi concluido, mas esse trabalho influenciou versoes subsequentes.
Enquanto tudo isso acontecia, as comunidades de codigo aberto e de desenvolvedores comecaram a trabalhar para revolucionar o que poderia ser feito com JavaScript. Esse esforco da comunidade surgiu em 2005, quando
Jesse James Garrett
lancou um
white paper
no qual cunhou o termo Ajax e descreveu um conjunto de tecnologias, das quais o JavaScript era o backbone, usado para criar aplicativos da Web onde os dados podem ser carregados em segundo plano, evitando a necessidade de recargas de paginas completas e levando a aplicativos mais dinamicos. Isso resultou em um periodo de renascimento do uso do JavaScript liderado pelas bibliotecas de codigo aberto e pelas comunidades que se formaram em torno delas, com bibliotecas como Prototype,
jQuery
,
Dojo Toolkit
,
MooTools
e outras.
Em julho de 2008, os diferentes partidos de ambos os lados se reuniram em Oslo. Isso levou ao eventual acordo no inicio de 2009 para renomear o ECMAScript 3.1 para o ECMAScript 5 e impulsionar o idioma usando uma agenda que e conhecida como Harmonia. O ECMAScript 5 foi finalmente lancado em dezembro de 2009.
Em junho de 2011, o ECMAScript 5.1 foi lancado para se alinhar totalmente com a terceira edicao do padrao internacional ISO / IEC 16262. O ECMAScript 2015 foi lancado em junho de 2015. O ECMAScript 2016 foi lancado em junho de 2016. A versao atual e o ECMAScript 2017, lancado em junho de 2017.
Desenvolvimentos posteriores
editar
JavaScript tornou-se uma das linguagens de programacao mais populares da web. No entanto, muitos programadores profissionais inicialmente desacreditaram a linguagem devido ao publico-alvo percebido de autores da Web e outros "amadores".
[
22
]
O advento do
Ajax
devolveu o JavaScript aos holofotes e atraiu mais atencao da programacao profissional. O resultado foi a proliferacao de estruturas e bibliotecas abrangentes, praticas de programacao JavaScript aprimoradas e aumento do uso de JavaScript fora dos navegadores da Web, conforme observado pela proliferacao de plataformas JavaScript do
lado do servidor
.
Em janeiro de 2009, o projeto
CommonJS
foi fundado com o objetivo de especificar uma biblioteca padrao comum principalmente para o desenvolvimento de JavaScript fora do navegador.
[
23
]
Com o surgimento de aplicativos de pagina unica e sites pesados em JavaScript, ele esta sendo cada vez mais usado como um alvo de compilacao para compiladores de origem para origem de linguagens dinamicas e estaticas.
As seguintes caracteristicas sao comuns a todas as implementacoes em conformidade com o ECMAScript, a menos que esteja explicitamente especificado ao contrario.
Todos os navegadores da Web modernos e populares suportam JavaScript com interpretadores integrados.
Imperativa e Estruturada
editar
JavaScript suporta os elementos de
sintaxe
de programacao estruturada da linguagem C como, por exemplo,
if
,
while
,
switch
. Uma excecao e a questao do escopo: o escopo em blocos ao estilo do C nao e suportado. Em seu lugar, JavaScript utiliza escopo a nivel de funcao. JavaScript 1.7, entretanto, suporta escopo a nivel de bloco atraves do comando
let
. Como C, JavaScript faz distincao entre expressoes e comandos. Uma diferenca sintatica do
C
e que a quebra de linha termina automaticamente o comando, sendo o ponto-e-virgula opcional ao fim de uma instrucao.
Como na maioria das linguagens de script, tipos sao associados com valores, nao com variaveis. Por exemplo, a variavel
x
poderia ser associada a um numero e mais tarde associada a uma
''string''
. JavaScript suporta varias formas de testar o tipo de um objeto, incluindo
duck typing
.
JavaScript e quase inteiramente baseada em objetos
[
carece?de fontes
]
. Objetos JavaScript sao
arrays
associativos, aumentados com prototipos. Os nomes da propriedade de um objeto sao
strings
:
obj
.
x
=
10
e
obj
[
"x"
]
=
10
sao equivalentes, o ponto neste exemplo e apenas sintatico. Propriedades e seus valores podem ser adicionadas, mudadas, ou deletadas em tempo de execucao. A maioria das propriedades de um objeto (e aqueles em sua cadeia de heranca via prototipo) pode ser enumerada usando-se uma estrutura de repeticao
for
...
in
. JavaScript possui um pequeno numero de objetos padrao da linguagem como
window
e
document
.
Avaliacao em tempo de execucao
editar
JavaScript inclui a funcao
eval
que consegue executar em tempo de execucao comandos da linguagem que estejam escritos em uma string.
Funcoes de primeira classe
editar
No JavaScript, as funcoes sao de primeira classe, isto e, sao objetos que possuem propriedades e metodos, e podem ser passados como argumentos, serem atribuidos a variaveis ou retornados como qualquer outro objeto.
Funcoes 'internas' ou 'aninhadas' sao funcoes definidas dentro de outras funcoes. Sao criadas cada vez que a funcao que as contem (externa) e invocada. Alem disso, o escopo da funcao externa, incluindo constantes, variaveis locais e valores de argumento, se transforma parte do estado interno de cada objeto criado a partir da funcao interna, mesmo depois que a execucao da funcao interna e concluida.
JavaScript permite que funcoes aninhadas sejam criadas com o escopo lexico no momento de sua definicao e possui o operador
()
para invoca-las em outro momento. Essa combinacao de codigo que pode ser executado fora do escopo no qual foi definido, com seu proprio escopo durante a execucao, e denominada, dentro da
ciencia da computacao
,
fechamento
.
JavaScript usa prototipos em vez de classes para o mecanismo de heranca. E possivel simular muitas caracteristicas de orientacao a objetos baseada em classes com prototipos.
function calcIdade(b) {
var hoje = new Date();
var a = hoje.getFullYear();
var idade = a - b;
return idade;
}
Diferente de muitas linguagens orientadas a objetos, nao ha distincao entre a definicao de uma funcao e a definicao de um metodo no JavaScript. A distincao ocorre durante a chamada da funcao; a funcao pode ser chamada como um metodo. Quando uma funcao e chamada como metodo de um objeto, a keyword
this
da funcao e associada aquele objeto via tal invocacao.
Extensoes especificas do fornecedor
editar
JavaScript e oficialmente gerenciado pela
Mozilla Foundation
, e novos recursos de idioma sao adicionados periodicamente. No entanto, apenas alguns mecanismos JavaScript suportam esses novos recursos:
- Funcoes de propriedade getter e setter (suportadas pelo
WebKit
,
Gecko
,
Opera
,
[
26
]
ActionScript
e Rhino).
[
27
]
- Clausulas de captura condicional.
- Protocolo iterador (adotado do
Python
).
- Compreensoes de
array
e gerador de expressoes (adotado do
Python
)
- Escopo de bloco adequado atraves da palavra-chave
let
- Desestruturacao de matriz e objeto (forma limitada de pattern matching)
- Expressoes de funcao concisas (
function(args) expr
)
- ECMAScript para
XML
(E4X), uma extensao que adiciona suporte XML nativo ao ECMAScript (nao suportado no
Firefox
desde a versao 21
[
28
]
)
O uso primario de JavaScript e escrever funcoes que sao embarcadas ou incluidas em paginas
HTML
e que interagem com o
Modelo de Objeto de Documentos
(DOM) da pagina. Alguns exemplos deste uso sao:
- abrir uma nova janela (dialog) com controle programatico sobre seu tamanho, posicao e atributos;
- validar valores de um formulario para garantir que sao aceitaveis antes de serem enviados ao servidor;
- mudar imagens a medida que o mouse se movimenta sobre elas.
Um recurso de interface util baseada em janela, e um tipo de janela secundaria da tela principal, ou janela principal, para solicitar ou exibir ao usuario determinadas informacoes complementares, semelhante a “caixa de dialogo” (dialog).
Existem dois tipos de associacao entre uma janela de dialogo e a janela principal a qual esta associada: "forma modal" (showModalDialog), quando a abertura da janela de dialogo flexivel sobreposta a janela principal sem a necessidade de recarregar a pagina principal apos o uso do modal, chamada de
Lightbox
, bloqueando a interacao com a janela principal e esmaecendo/escurecendo o fundo ate que o
dialog
seja encerrado; ou "forma nao modal", em que pode haver interacao concomitante nas duas janelas (principal e dialogo) sem bloqueio da principal, O caso mais comum e do
dialog
modal.
[
29
]
[
30
]
Pelo fato do codigo JavaScript rodar localmente no navegador do usuario, e nao em um servidor remoto, o navegador pode responder a tais acoes rapidamente, fazendo uma aplicacao mais responsiva. Alem disso, o codigo JavaScript pode detectar acoes de usuario que o HTML sozinho nao pode, tais como teclas pressionadas individualmente. Aplicacoes como
Gmail
tomam vantagem disso: muito da logica da interface do usuario e escrita em JavaScript, e o JavaScript envia requisicoes de informacao, tais como o conteudo de um correio eletronico, para o servidor. A tendencia mais ampla de programacao em
Ajax
explora de maneira similar este ponto forte.
Uma JavaScript engine (tambem conhecida como
interpretador
JavaScript ou uma implementacao JavaScript) interpreta
codigo fonte
JavaScript e o executa de forma adequada. A primeira implementacao JavaScript foi criada por Brendan Eich na Netscape Communications Corporation, para o Navegador Netscape. A implementacao, nomeada SpiderMonkey, e implementada em C e vem sendo atualizada para conformar com a edicao 3 do ECMA-262. A implementacao
Rhino
, criada primariamente por
Norris Boyd
(ex-empregado da Netscape; agora no
Google
) e uma implementacao de JavaScript em Java. Rhino, como
SpiderMonkey
, e conformante com a terceira edicao do ECMA-262.
Por ser o JavaScript a unica linguagem que a maioria dos navegadores populares suportam, tem se tornado uma linguagem alvo para muitos frameworks em outras linguagens, a despeito do fato de nao ter sido planejado para tal. Nao obstante as limitacoes de desempenho inerente a sua natureza dinamica, a crescente velocidade das implementacoes JavaScript tem feito da mesma uma pratica linguagem intermediaria.
Um exemplo minimalista de uma pagina conforme os padroes web (utilizando a sintaxe
HTML5
) que contem JavaScript pode ser representado pelo seguinte codigo:
<!DOCTYPE html>
<
html
lang
=
"pt-BR"
>
<
head
>
<
meta
charset
=
"UTF-8"
/>
<
title
>
Wikipedia
</
title
>
<
script
>
window
.
onload
=
function
()
{
document
.
getElementById
(
"hello"
).
addEventListener
(
"click"
,
function
()
{
alert
(
"Bem-vindo a Wikipedia!"
);
},
false
);
};
</
script
>
</
head
>
<
body
>
<
noscript
>
Seu navegador nao suporta JavaScript ou ele esta desabilitado.
</
noscript
>
<
button
id
=
"hello"
>
Dizer "Ola"
</
button
>
</
body
>
</
html
>
No
script
acima, vimos que existe uma tag chamada
<noscript>
, ela esta neste codigo HTML porque e um meio de acessibilidade com o
cliente
, fazendo com que seu texto seja renderizado pelo navegador quando o JavaScript estiver desativado.
Ja que JavaScript roda em ambientes variaveis, uma parte importante do teste e depuracao de seu codigo consiste na verificacao de compatibilidade entre navegadores.
As interfaces DOM para a manipulacao de paginas web nao sao parte do padrao ECMA, ou do proprio JavaScript. Oficialmente, sao definidas por um esforco de padronizacao da
W3C
; na pratica, implementacoes de navegadores diferem do padrao de uma para as outras, e nem todos navegadores executam JavaScript.
Para lidar com essas diferencas, programadores JavaScript com frequencia tentam escrever codigos que conformam com o padrao comum a maioria dos navegadores; nao sendo possivel isso, tentam escrever de maneira ad-hoc um codigo que verifique a presenca de certos recursos e que se comporte de maneira adequada caso tais recursos nao estejam disponiveis. Em alguns casos, dois navegadores podem ambos implementarem uma funcionalidade com comportamentos diferentes, e programadores podem achar pratico detectar qual navegador esta rodando e mudar o comportamento de seus scripts para se adequar a isso. Programadores podem tambem usar bibliotecas ou ferramentas que abstraem tais diferencas entre navegadores.
Alem disso, scripts podem nao funcionar para alguns usuarios. Por exemplo, um usuario pode:
- Usar um navegador antigo ou raro com suporte DOM incompleto ou incomum.
- Usar um navegador de um
PDA
ou telefone movel que nao esta apto a executar JavaScript.
- Ter a execucao do JavaScript desabilitada por normas de seguranca.
Para suportar tais usuarios, programadores web tentam criar paginas que sejam robustas a agentes que nao suportem o JavaScript da pagina. Em particular, uma pagina deve funcionar a despeito das funcionalidades extras que um JavaScript prove. Uma abordagem alternativa que muitos acham preferivel e a pagina se desenvolvida por primeiro a partir de tecnologias basicas que funcionem em todos os navegadores, e entao aprimora-la para os usuarios que possuam JavaScript.
Assumindo que o usuario nao tenha desabilitado sua execucao, pode-se utilizar JavaScript do
lado cliente
para melhorar a experiencia de um usuario com deficiencia fisica ou visual.
Leitores de tela utilizados por pessoas cegas ou com visao parcial podem detectar a presenca de JavaScript e dessa forma acessar e ler o DOM da pagina depois que seus scripts foram executados. Nestes casos recomenda-se que o HTML seja o mais conciso, navegavel e rico semanticamente possivel, tendo a pagina scripts ou nao. Nao se recomenda que o codigo JavaScript de uma pagina seja totalmente dependente dos eventos provenientes do mouse ja que usuarios que nao conseguem ou optam por nao usar o mouse nao estarao aptos a colher os beneficios de tal codigo. Da mesma forma, embora hyperlinks e webforms possam ser navegados e operados do
teclado
, JavaScript voltado para acessibilidade nao deve requerer um teclado para acessar tais eventos. JavaScript conta com eventos independentes do dispositivo de usuario tais como
onfocus
e
onchange
que sao mais recomendados na maioria dos casos.
Nao se recomenda utilizar JavaScript de um jeito que seja confuso ou desorientador para qualquer usuario da internet. Por exemplo, usar JavaScript para alterar ou desabilitar a funcionalidade normal de um navegador, tal como mudar a forma com que o botao direito ou o evento de atualizacao funcionam, deve ser evitado. Da mesma forma, eventos de interrupcao que o usuario pode nao estar ciente reduzem a sensacao de controle do usuario, assim como scripts inesperados que mudam o conteudo da pagina.
Frequentemente o processo de fazer paginas web complexas tao acessiveis quanto possivel se transforma em um problema nao trivial, onde certas decisoes sao assunto de debate e opiniao. Entretanto, tecnologias assistivas estao constantemente evoluindo e novas recomendacoes e informacoes relevantes vem sendo continuamente publicadas na web.
JavaScript e o DOM representam uma potencialidade para programadores maliciosos escreverem scripts para rodarem em um cliente via web. Navegadores sao projetados para conter este risco de duas maneiras. A primeira e que scripts sao rodados em uma
sandbox
na qual so podem executar acoes relacionadas a internet, nao tarefas de programacao de proposito geral como criar arquivos. A segunda e que scripts sao limitados pela regra da mesma origem: scripts de um
website
nao tem acesso a informacoes como nomes de usuario, senhas ou cookies enviados de outro site. A maioria dos bugs em JavaScript relacionados a seguranca sao brechas de uma das regras.
Vulnerabilidades inter-site
editar
Um problema comum relacionado a seguranca e a escrita de scripts inter-site, ou
XSS
, uma violacao da regra da mesma origem. Tais vulnerabilidades ocorrem quando um atacante esta apto a causar em um site alvo, como um site de banco, a inclusao de um script malicioso na
pagina web
apresentada a vitima. O script neste exemplo pode entao acessar a aplicacao do banco com privilegios da vitima, potencialmente revelando informacoes secretas ou transferindo dinheiro sem a autorizacao da vitima.
Alguns navegadores incluem protecao parcial contra ataques XSS refletidos, no qual o atacante fornece uma URL incluindo o script malicioso. No entanto, mesmo usuarios destes sites estao vulneraveis a outros ataques XSS, como aqueles onde o codigo malicioso e guardado em um
banco de dados
. Apenas o correto desenho de aplicacoes web no servidor pode prevenir inteiramente ataques XSS.
Vulnerabilidades XSS tambem podem ocorrer por causa de erros de implementacao por parte de programadores de navegadores.
Outra vulnerabilidade inter-site e a falsificacao de requisicao inter-site ou
CSRF
. No CSRF, o codigo no site de um atacante faz com que o navegador da vitima tome acoes nao desejadas pelo usuario em um site alvo (como transferencia de dinheiro em um banco). Ela funciona porque, se o site alvo conta apenas com cookies para autenticar requisicoes, entao requisicoes iniciadas pelo codigo no site do atacante levarao as mesmas credenciais legitimas de login que as requisicoes iniciadas pelo usuario. Em geral a solucao para CSRF e requerer um valor de autenticacao em um campo webform escondido, e nao somente nos cookies, para autenticar qualquer requisicao que possa ter efeitos duradouros. Verificar o cabecalho do HTTP Referrer tambem pode ajudar.
"Sequestro JavaScript" e um tipo de ataque CSRF no qual uma tag
<script>
no site do atacante explora uma pagina no lado da vitima que retorna informacao privada tal como
JSON
ou JavaScript. Solucoes possiveis incluem requerer um token de autenticacao nos parametros
POST
e
GET
para qualquer resposta que retorne um JSON privado (mesmo que nao tenha efeitos colaterais); utilizar POST e nunca GET para requisicoes que retornem um JSON privado; e modificar a resposta de forma que nao possa ser usada via uma tag
<script>
(atraves, por exemplo, de um
wrapping
de um JSON em um comentario JavaScript).
Confianca duvidosa (cliente)
editar
Desenvolvedores de aplicativos cliente-servidor devem reconhecer que clientes nao confiaveis ??podem estar sob o controle de invasores. O autor do aplicativo nao pode presumir que seu codigo JavaScript sera executado como pretendido (ou de todo) porque qualquer segredo incorporado no codigo pode ser extraido por um determinado adversario. Algumas implicacoes sao:
- Os desenvolvedores de sites nao podem ocultar perfeitamente como o JavaScript do site funciona porque o
codigo-fonte
bruto deve ser enviado ao cliente. O codigo pode ser ofuscado, mas a ofuscacao pode ser projetada por
engenharia reversa
.
- A validacao de formulario JavaScript fornece apenas conveniencia para usuarios, nao seguranca. Se um site verificar que o usuario concordou com seus termos de servico ou filtra caracteres invalidos em campos que devem conter apenas numeros, ele deve faze-lo no servidor, nao apenas no cliente.
- Os scripts podem ser desativados seletivamente, portanto, nao se pode confiar em JavaScript para impedir operacoes, como clicar com o botao direito do mouse em uma imagem para salva-la.
- E uma pratica extremamente ruim incorporar informacoes confidenciais, como senhas, em JavaScript, porque elas podem ser extraidas por um invasor.
Confianca duvidosa (servidor)
editar
Sistemas de gerenciamento de pacotes, como npm e Bower, sao populares entre os desenvolvedores de JavaScript. Tais sistemas permitem que um desenvolvedor gerencie facilmente as dependencias de seus programas sobre as bibliotecas de programas de outros desenvolvedores. Os desenvolvedores confiam que os mantenedores das bibliotecas os manterao seguros e atualizados, mas nem sempre e esse o caso. Uma vulnerabilidade surgiu por causa dessa confianca cega. Bibliotecas confiaveis ??podem ter novas versoes que causam bugs ou vulnerabilidades em todos os programas que dependem das bibliotecas. Inversamente, uma biblioteca pode ficar sem correcao com vulnerabilidades conhecidas na natureza. Em um estudo feito olhando uma amostra de 133 sites, os pesquisadores descobriram que 37% dos sites incluiam uma biblioteca com pelo menos uma vulnerabilidade conhecida. O atraso mediano entre a versao da biblioteca mais antiga usada em cada site e a mais nova versao disponivel dessa biblioteca e de 1.177 dias na ALEXA, e o desenvolvimento de algumas bibliotecas ainda em uso ativo cessou anos atras. Outra possibilidade e que o mantenedor de uma biblioteca pode remover a biblioteca completamente. Isso ocorreu em marco de 2016, quando o Azer Koculu removeu seu repositorio do npm. Isso fez com que todas as dezenas de milhares de programas e sites, dependendo de suas bibliotecas, quebrassem.
Erros de codificacao do navegador e do plug-in
editar
O JavaScript fornece uma interface para uma ampla gama de recursos do navegador, alguns dos quais podem ter falhas, como
estouro de buffer
. Essas falhas podem permitir que invasores escrevam scripts que executariam qualquer codigo que desejassem no sistema do usuario. Este codigo nao e de forma alguma limitado a outro aplicativo JavaScript. Por exemplo, uma exploracao de buffer overrun pode permitir que um invasor obtenha acesso a
API
do sistema operacional com privilegios de superusuario.
Essas falhas afetaram os principais navegadores, incluindo
Firefox
,
[
31
]
Internet Explorer
[
32
]
e
Safari
.
[
33
]
Plugins, como players de video,
Adobe Flash
e a ampla gama de controles
ActiveX
habilitados por padrao no
Microsoft Internet Explorer
, tambem podem ter falhas exploraveis ??via JavaScript (tais falhas foram exploradas no passado).
[
34
]
[
35
]
No
Windows Vista
, a
Microsoft
tentou conter os riscos de erros, como
estouro de buffer
, executando o processo do
Internet Explorer
com privilegios limitados.
[
36
]
O
Google Chrome
confina seus renderizadores de pagina a sua propria "sandbox".
Erros de implementacao da Sandbox
editar
Os navegadores da Web sao capazes de executar o JavaScript fora do sandbox, com os privilegios necessarios para, por exemplo, criar ou excluir arquivos. Naturalmente, esses privilegios nao devem ser concedidos ao codigo da Web.
A concessao incorreta de privilegios ao JavaScript da Web desempenhou um papel importante nas vulnerabilidades do
Internet Explorer
[
37
]
e do
Firefox
.
[
38
]
No Windows XP Service Pack 2, a
Microsoft
rebaixou os privilegios do
JScript
no
Internet Explorer
.
[
39
]
O
Microsoft Windows
permite que os arquivos de origem JavaScript no disco rigido de um computador sejam lancados como programas de uso geral e sem area de seguranca. Isso torna o JavaScript (como o VBScript) um vetor teoricamente viavel para um
cavalo de Troia
, embora cavalos de Troia em JavaScript sejam incomuns na pratica.
[
40
]
Vulnerabilidades de Hardware
editar
Em 2015, uma implementacao de prova de conceito baseada em JavaScript de um ataque de desajustes foi descrita em um artigo por pesquisadores de seguranca.
[
41
]
[
42
]
[
43
]
Em 2017, foi demonstrado um ataque baseado em JavaScript via navegador que poderia ignorar o ASLR. E chamado de "ASLR?Cache" ou AnC.
[
44
]
[
45
]
// Mostra um alerta de Confirmar e Cancelar.
if
(
confirm
(
'Escolha "Ok" ou "Cancelar" para ver a mensagem correspondente.'
)
)
{
alert
(
'Voce apertou o botao "OK"'
);
// mostra um alerta para resposta "OK"
}
else
{
alert
(
'Voce apertou o botao "Cancelar"'
);
// mostra um alerta para resposta "Cancelar"
}
JavaScript permite utilizar comentarios de duas formas:
- Comentarios de unica linha;
- Comentarios de multiplas linhas.
Exemplos de comentarios:
// Este comentario ocupa uma unica linha
/* Ja este comentario
e mais longo e utiliza
varias linhas */
Criando uma funcao simples:
function
nomeDaFuncao
(
/*parametros*/
)
{
/* codigo que sera executado */
return
/*Valor retornado*/
;
}
//Construtor
//Construtor
function
Exemplo
()
{
this
.
propriedade
=
'Isso e uma propriedade.'
,
this
.
metodo
=
function
()
{
return
'Isso e um metodo'
;
}
}
var
objeto
=
new
Exemplo
();
//Instancia do construtor "Exemplo"
//Alerta os respectivos textos na tela
alert
(
objeto
.
propriedade
),
alert
(
objeto
.
metodo
());
function
perfectNumbers
(
max
)
{
var
i
,
j
,
k
,
perfects
=
[];
for
(
i
=
0
;
i
++
<
max
;)
{
for
(
j
=
k
=
0
;
++
j
<
i
;)
{
if
(
i
%
j
===
0
)
{
k
+=
j
;
}
}
if
(
k
===
i
)
{
perfects
.
push
(
k
);
}
}
return
perfects
.
join
(
', '
);
}
alert
(
'Numeros perfeitos de 1 a 5000:'
+
perfectNumbers
(
5000
));
Ferramentas de Desenvolvimento
editar
Dentro do JavaScript, o acesso a um depurador se torna inestimavel ao desenvolver programas grandes e nao triviais. Pode haver diferencas de implementacao entre os varios navegadores (especialmente dentro do DOM), portanto, e util ter acesso a um depurador para cada um dos navegadores que um aplicativo Web tem como destino.
[
46
]
Os depuradores de scripts sao integrados em muitos navegadores comuns, como o
Internet Explorer
, o
Firefox
, o
Safari
, o
Google Chrome
e o
Opera
.
Alem das Ferramentas nativas para desenvolvedores do Internet Explorer, tres outros depuradores estao disponiveis para o Internet Explorer: O
Microsoft Visual Studio
possui o maior numero de recursos dos tres, seguido de perto pelo Microsoft Script Editor (um componente do
Microsoft Office
), e finalmente depurador de scripts da Microsoft gratuito. O Microsoft Visual Web Developer Express gratuito fornece uma versao limitada da funcionalidade de depuracao do JavaScript no Microsoft Visual Studio.
Em comparacao com o Internet Explorer, o Firefox tem um conjunto mais abrangente de ferramentas para desenvolvedores, que inclui tambem um depurador. Versoes antigas do Firefox sem essas ferramentas usavam um addon do Firefox chamado Firebug, ou o antigo depurador do Venkman. O Web Inspector WebKit inclui um depurador JavaScript,
[
47
]
que e usado no Safari. Uma versao modificada chamada Blink DevTools e usada no Google Chrome. O Node.js possui o Node Inspector, um depurador interativo que se integra ao Blink DevTools. O Opera inclui um conjunto de ferramentas chamado Dragonfly.
Alem do software de computador nativo, ha o ambiente de desenvolvimento integrado (
IDEs
) JavaScript on-line, que possui recursos de depuracao que sao gravados em JavaScript e criados para serem executados na Web. Um exemplo e o programa
JSLint
, desenvolvido por
Douglas Crockford
, que escreveu extensivamente sobre o idioma. O JSLint verifica o codigo JavaScript para conformidade com um conjunto de padroes e diretrizes. Muitas bibliotecas para JavaScript, como o three.js, fornecem links para o codigo de demonstracao que pode ser editado pelos usuarios. Os codigos de demonstracao tambem sao usados ??como uma ferramenta pedagogica por instituicoes como a
Khan Academy
para permitir que os alunos experimentem escrever codigo em um ambiente onde possam ver a saida de seus programas, sem precisar de configuracao alem do navegador da web.
JavaScript foi inicialmente desenvolvido em 1996 para uso no navegador da Web
Netscape Navigator
. No mesmo ano, a
Microsoft
lancou uma implementacao para o
Internet Explorer
. Essa implementacao foi chamada de
JScript
devido a problemas de marca registrada. Em 1997, a primeira versao padronizada da linguagem foi lancada sob o nome
ECMAScript
na primeira edicao da norma ECMA-262.
A versao explicita e o opt-in dos recursos de linguagem eram especificos do
Mozilla
e foram removidos em versoes posteriores do
Firefox
(pelo menos no Firefox 59). O
Firefox 4
foi a ultima versao que se referiu a uma versao explicita de JavaScript (1.8.5). Com as novas edicoes do padrao ECMA-262, os recursos de linguagem JavaScript sao agora mencionados com sua definicao inicial nas edicoes do ECMA-262.
A tabela a seguir de versoes JavaScript com versao explicita e baseada em informacoes de varias fontes confiaveis.
[
48
]
[
49
]
[
50
]
Versao
[
51
]
|
Data da publicacao
|
Equivalente para
|
Netscape
Navigator
|
Mozilla
Firefox
|
Internet
Explorer
|
Opera
|
Safari
|
Google
Chrome
|
1.0
|
Marco de 1996
|
|
2.0
|
|
3.0
|
|
|
|
1.1
|
Agosto de 1996
|
|
3.0
|
|
|
|
|
|
1.2
|
Junho de 1997
|
|
4.0-4.05
|
|
|
3
|
|
|
1.3
|
Outubro de 1998
|
ECMA-262 1st edition / ECMA-262 2nd edition
|
4.06-4.7x
|
|
4.0
|
5
|
|
|
1.4
|
|
|
Netscape
Server
|
|
|
6
|
|
|
1.5
|
Novembro de 2000
|
ECMA-262 3rd edition
|
6.0
|
1.0
|
5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 5.8)
|
7.0
|
3.0-5
|
1.0-10.0.666
|
1.6
|
Novembro de 2005
|
1.5 + Array extras + Array e strings genericas. + E4X
|
|
1.5
|
|
|
|
|
1.7
|
Outubro de 2006
|
1.6 + Geradores Pythonic + Iteradores + let
|
|
2.0
|
|
|
|
28.0.1500.95
|
1.8
|
Junho de 2008
|
1.7 + Expressoes geradoras + Expressoes de clausura.
|
|
3.0
|
|
11.50
|
|
|
1.8.1
|
|
1.8 + Native JSON support + Minor Updates
|
|
3.5
|
|
|
|
|
1.8.2
|
Junho de 2009
|
1.8.1 + Minor updates
|
|
3.6
|
|
|
|
|
1.8.5
|
Julho de 2010
|
1.8.2 + novas caracteristicas para ECMA-262 5th edition compilance (ultima versao explicita do JavaScript)
|
|
4.0
|
|
|
|
|
Referencias
- ↑
≪Standard ECMA-262≫
. ecma-international.org
. Consultado em 31 de dezembro de 2023
- ↑
Flanagan, David; Ferguson, Paula (2002).
JavaScript: The Definitive Guide
4th ed. [S.l.]: O'Reilly & Associates.
ISBN
0-596-00048-0
- ↑
Daniela Rocha Silva, Daniela (2017). ≪A linguagem JavaScript≫.
Um Estudo em Larga Escala sobre a Estrutura do Codigo-fonte de Pacotes JavaScript
(PDF)
(Tese de Bacharel). Universidade Federal do Estado do Rio de Janeiro (UNIRIO)
. Consultado em 22 de outubro de 2019
- ↑
Silva, Giancarlo (28 de janeiro de 2015).
≪O que e e como funciona a linguagem JavaScript?≫
. Canaltech
. Consultado em 3 de maio de 2020
- ↑
≪javascript - What is VanillaJS?≫
.
Stack Overflow
. Consultado em 16 de marco de 2019
- ↑
≪Vanilla JS≫
.
vanilla-js.com
. Consultado em 16 de marco de 2019
- ↑
≪WebCite query result≫
(PDF)
.
www.webcitation.org
. Consultado em 16 de marco de 2019
- ↑
≪ECMAScript Language Specification≫
(PDF)
. Consultado em 10 de fevereiro de 2011
. Arquivado do
original
(PDF)
em 12 de abril de 2015
- ↑
≪TimelineJS Embed≫
.
cdn.knightlab.com
. Consultado em 17 de marco de 2019
- ↑
≪Chapter 4. How JavaScript Was Created≫
.
speakingjs.com
. Consultado em 17 de marco de 2019
- ↑
Severance, C. (fevereiro de 2012).
≪JavaScript: Designing a Language in 10 Days≫
.
Computer
.
45
(2): 7?8.
ISSN
0018-9162
.
doi
:
10.1109/MC.2012.57
- ↑
≪Press Release≫
.
web.archive.org
. 16 de setembro de 2007
. Consultado em 17 de marco de 2019
- ↑
≪TechVision: Innovators of the Net: Brendan Eich and JavaScript≫
.
web.archive.org
. 8 de fevereiro de 2008
. Consultado em 17 de marco de 2019
- ↑
≪The History of Programming Languages - O'Reilly Media≫
.
web.archive.org
. 12 de julho de 2016
. Consultado em 17 de marco de 2019
- ↑
≪History of Nombas≫
.
www.brent-noorda.com
. Consultado em 17 de marco de 2019
- ↑
≪New JavaScript Engine Module Owner ? Brendan Eich≫
.
brendaneich.com
. Consultado em 17 de marco de 2019
- ↑
≪Server-Side JavaScript Guide≫
.
docs.oracle.com
. Consultado em 17 de marco de 2019
- ↑
LLC), Tara Meyer (Aquent.
≪Introducing JScript .NET≫
.
docs.microsoft.com
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪Server-Side Javascript: Back With a Vengeance≫
.
ReadWrite
(em ingles). 17 de dezembro de 2009
. Consultado em 17 de marco de 2019
- ↑
≪TypeScript joins 5 most used languages in 2022 lineup≫
.
The Register
. 22 de junho de 2022
. Consultado em 21 de novembro de 2022
- ↑
a
b
≪JavaScript: How Did We Get Here? - O'Reilly Media≫
.
web.archive.org
. 19 de julho de 2016
. Consultado em 17 de marco de 2019
- ↑
≪JavaScript: The World's Most Misunderstood Programming Language≫
.
www.crockford.com
. Consultado em 17 de marco de 2019
- ↑
Kowal, Kris (1 de dezembro de 2009).
≪CommonJS effort sets JavaScript on path for world domination≫
.
Ars Technica
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪Trademark Status & Document Retrieval≫
.
tsdr.uspto.gov
. Consultado em 17 de marco de 2019
- ↑
≪Sun Trademarks≫
.
web.archive.org
. 28 de maio de 2010
. Consultado em 17 de marco de 2019
- ↑
≪Getters and setters with JavaScript ? code samples and demos - Robert's talk≫
.
robertnyman.com
. Consultado em 17 de marco de 2019
- ↑
≪John Resig - JavaScript Getters and Setters≫
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪E4X≫
.
MDN Web Docs
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
Marcio d'Avila (8 de dezembro de 2006).
≪Janela modal na web≫
. mhavila
. Consultado em 2 de fevereiro de 2017
- ↑
Alexandre Magno. (8 de dezembro de 2006).
≪Javascript para o Bootstrap≫
. Github
. Consultado em 2 de fevereiro de 2017
- ↑
≪Buffer overflow in crypto.signText()≫
.
Mozilla
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪Buffer-overflow bug in IE - Tech News - CNET.com≫
.
web.archive.org
. 25 de dezembro de 2002
. Consultado em 17 de marco de 2019
- ↑
≪Apple Safari JavaScript Buffer Overflow Lets Remote Users Execute Arbitrary Code and HTTP Redirect Bug Lets Remote Users Access Files - SecurityTracker≫
.
securitytracker.com
. Consultado em 17 de marco de 2019
- ↑
≪Microsoft WebViewFolderIcon ActiveX Control Buffer Overflow Vulnerability≫
.
www.securityfocus.com
. Consultado em 17 de marco de 2019
- ↑
≪WebCite query result≫
.
www.webcitation.org
. Consultado em 17 de marco de 2019
- ↑
≪Protected Mode in Vista IE7 ? IEBlog≫
.
blogs.msdn.microsoft.com
. Consultado em 17 de marco de 2019
- ↑
www.kb.cert.org
https://www.kb.cert.org/vuls/id/713878/
. Consultado em 17 de marco de 2019
- ↑
≪Privilege escalation via DOM property overrides≫
.
Mozilla
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
LLC), Tara Meyer (Aquent.
≪Part 5: Enhanced Browsing Security≫
.
docs.microsoft.com
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪JS.Seeker.K | Symantec≫
.
www.symantec.com
. Consultado em 17 de marco de 2019
- ↑
≪Computer Science≫
.
arxiv.org
. Consultado em 17 de marco de 2019
- ↑
Jean-Pharuns, Alix (30 de julho de 2015).
≪Rowhammer.js Is the Most Ingenious Hack I've Ever Seen≫
.
Motherboard
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
Goodin, Dan (4 de agosto de 2015).
≪DRAM "Bitflipping" exploit for attacking PCs: Just add JavaScript≫
.
Ars Technica
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪AnC≫
.
VUSec
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
Goodin, Dan (15 de fevereiro de 2017).
≪New ASLR-busting JavaScript is about to make drive-by exploits much nastier≫
.
Ars Technica
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
Steen, Chris Mills, Hallvord R. M.
≪Advanced Debugging With JavaScript≫
.
alistapart.com
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪Introducing Drosera≫
.
WebKit
. 28 de junho de 2006
. Consultado em 17 de marco de 2019
- ↑
≪New in JavaScript≫
.
MDN Web Docs
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪John Resig - Versions of JavaScript≫
(em ingles)
. Consultado em 17 de marco de 2019
- ↑
≪What Version of Javascript≫
.
web.archive.org
. 9 de janeiro de 2017
. Consultado em 17 de marco de 2019
- ↑
John Resig.
≪Versions of JavaScript≫
. Ejohn.org
. Consultado em 19 de maio de 2009
- Tom Negrino, Dori Smith, JavaScript Para World Wide Web, Traducao 3a. Edicao, Visual QuickStart Guide, ano 1999, Editora Campus,
ISBN 85-352-0622-1
- Arman Danesh, Teach Yourself JavaScript in a Week, ano 1996, Editora: Sams Net,
ISBN 1-57521-073-8
- David Flanagan, Javascript O Guia Definitivo, 6a. edicao, ano 2013, Editora O´Reilly,
ISBN 978-85-65837-19-4