한국   대만   중국   일본 
JavaScript ? Wikipedia, a enciclopedia livre

JavaScript

linguagem de programacao
 Nota: ?Nao confundir com Java (linguagem de programacao) .

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 .

JavaScript

Logotipo nao oficial da JSConf EU 2011.
Paradigma Multiparadigma
Surgido em 4 de dezembro de 1995 (28 anos)
Ultima versao ECMAScript 2023 (junho de 2023 [ 1 ] )
Criado por Brendan Eich
Estilo de tipagem
  • dinamica
  • fraca
Principais implementacoes
  • V8
  • JavaScriptCore
  • SpiderMonkey
Dialetos: TypeScript
Influenciada por
Influenciou
Extensao do arquivo :
  • .js
  • .mjs
  • .cjs

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.

Historia

editar

Inicio no Netscape

editar

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 ]

JavaScript Back-end

editar

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 ]

Adocao pela Microsoft

editar

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.

Padronizacao

editar

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.

Marca comercial

editar

"JavaScript" e uma marca comercial da Oracle Corporation nos Estados Unidos. [ 24 ] Ele e usado sob licenca para tecnologia inventada e implementada pela Netscape Communications e entidades atuais, como a Fundacao Mozilla . [ 25 ]

Caracteristicas

editar

As seguintes caracteristicas sao comuns a todas as implementacoes em conformidade com o ECMAScript, a menos que esteja explicitamente especificado ao contrario.

Suporte universal

editar

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.

Dinamica

editar

Tipagem dinamica

editar

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 .

Baseada em objetos

editar

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.

Funcional

editar

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 aninhadas

editar

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.

Fechamentos

editar

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 .

Baseada em Prototipos

editar

Prototipos

editar

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;
}

Funcoes e metodos

editar

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 ] )

Uso em paginas Web

editar

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.

Exemplo

editar

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.

Compatibilidade

editar

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.

Acessibilidade

editar

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.

Seguranca

editar

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 ]

Exemplos de scripts

editar

Scripts Simples

editar
// 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"

}

Comentarios

editar

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 */

Funcoes

editar

Criando uma funcao simples:

function
 nomeDaFuncao
(
 /*parametros*/
 )
 {

 /* codigo que sera executado */


 return
/*Valor retornado*/
;

}

Hierarquia do objeto

editar
//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
());

Numeros Perfeitos

editar
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.

Versao

editar

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

Ver tambem

editar

Referencias

  1. ≪Standard ECMA-262≫ . ecma-international.org . Consultado em 31 de dezembro de 2023  
  2. Flanagan, David; Ferguson, Paula (2002). JavaScript: The Definitive Guide 4th ed. [S.l.]: O'Reilly & Associates. ISBN  0-596-00048-0  
  3. 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  
  4. Silva, Giancarlo (28 de janeiro de 2015). ≪O que e e como funciona a linguagem JavaScript?≫ . Canaltech . Consultado em 3 de maio de 2020  
  5. ≪javascript - What is VanillaJS?≫ . Stack Overflow . Consultado em 16 de marco de 2019  
  6. ≪Vanilla JS≫ . vanilla-js.com . Consultado em 16 de marco de 2019  
  7. ≪WebCite query result≫ (PDF) . www.webcitation.org . Consultado em 16 de marco de 2019  
  8. ≪ECMAScript Language Specification≫ (PDF) . Consultado em 10 de fevereiro de 2011 . Arquivado do original (PDF) em 12 de abril de 2015  
  9. ≪TimelineJS Embed≫ . cdn.knightlab.com . Consultado em 17 de marco de 2019  
  10. ≪Chapter 4. How JavaScript Was Created≫ . speakingjs.com . Consultado em 17 de marco de 2019  
  11. 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  
  12. ≪Press Release≫ . web.archive.org . 16 de setembro de 2007 . Consultado em 17 de marco de 2019  
  13. ≪TechVision: Innovators of the Net: Brendan Eich and JavaScript≫ . web.archive.org . 8 de fevereiro de 2008 . Consultado em 17 de marco de 2019  
  14. ≪The History of Programming Languages - O'Reilly Media≫ . web.archive.org . 12 de julho de 2016 . Consultado em 17 de marco de 2019  
  15. ≪History of Nombas≫ . www.brent-noorda.com . Consultado em 17 de marco de 2019  
  16. ≪New JavaScript Engine Module Owner ? Brendan Eich≫ . brendaneich.com . Consultado em 17 de marco de 2019  
  17. ≪Server-Side JavaScript Guide≫ . docs.oracle.com . Consultado em 17 de marco de 2019  
  18. LLC), Tara Meyer (Aquent. ≪Introducing JScript .NET≫ . docs.microsoft.com (em ingles) . Consultado em 17 de marco de 2019  
  19. ≪Server-Side Javascript: Back With a Vengeance≫ . ReadWrite (em ingles). 17 de dezembro de 2009 . Consultado em 17 de marco de 2019  
  20. ≪TypeScript joins 5 most used languages in 2022 lineup≫ . The Register . 22 de junho de 2022 . Consultado em 21 de novembro de 2022  
  21. 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  
  22. ≪JavaScript: The World's Most Misunderstood Programming Language≫ . www.crockford.com . Consultado em 17 de marco de 2019  
  23. 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  
  24. ≪Trademark Status & Document Retrieval≫ . tsdr.uspto.gov . Consultado em 17 de marco de 2019  
  25. ≪Sun Trademarks≫ . web.archive.org . 28 de maio de 2010 . Consultado em 17 de marco de 2019  
  26. ≪Getters and setters with JavaScript ? code samples and demos - Robert's talk≫ . robertnyman.com . Consultado em 17 de marco de 2019  
  27. ≪John Resig - JavaScript Getters and Setters≫ (em ingles) . Consultado em 17 de marco de 2019  
  28. ≪E4X≫ . MDN Web Docs (em ingles) . Consultado em 17 de marco de 2019  
  29. Marcio d'Avila (8 de dezembro de 2006). ≪Janela modal na web≫ . mhavila . Consultado em 2 de fevereiro de 2017  
  30. Alexandre Magno. (8 de dezembro de 2006). ≪Javascript para o Bootstrap≫ . Github . Consultado em 2 de fevereiro de 2017  
  31. ≪Buffer overflow in crypto.signText()≫ . Mozilla (em ingles) . Consultado em 17 de marco de 2019  
  32. ≪Buffer-overflow bug in IE - Tech News - CNET.com≫ . web.archive.org . 25 de dezembro de 2002 . Consultado em 17 de marco de 2019  
  33. ≪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  
  34. ≪Microsoft WebViewFolderIcon ActiveX Control Buffer Overflow Vulnerability≫ . www.securityfocus.com . Consultado em 17 de marco de 2019  
  35. ≪WebCite query result≫ . www.webcitation.org . Consultado em 17 de marco de 2019  
  36. ≪Protected Mode in Vista IE7 ? IEBlog≫ . blogs.msdn.microsoft.com . Consultado em 17 de marco de 2019  
  37. www.kb.cert.org https://www.kb.cert.org/vuls/id/713878/ . Consultado em 17 de marco de 2019   Em falta ou vazio |titulo= ( ajuda )
  38. ≪Privilege escalation via DOM property overrides≫ . Mozilla (em ingles) . Consultado em 17 de marco de 2019  
  39. LLC), Tara Meyer (Aquent. ≪Part 5: Enhanced Browsing Security≫ . docs.microsoft.com (em ingles) . Consultado em 17 de marco de 2019  
  40. ≪JS.Seeker.K | Symantec≫ . www.symantec.com . Consultado em 17 de marco de 2019  
  41. ≪Computer Science≫ . arxiv.org . Consultado em 17 de marco de 2019  
  42. 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  
  43. 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  
  44. ≪AnC≫ . VUSec (em ingles) . Consultado em 17 de marco de 2019  
  45. 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  
  46. Steen, Chris Mills, Hallvord R. M. ≪Advanced Debugging With JavaScript≫ . alistapart.com (em ingles) . Consultado em 17 de marco de 2019  
  47. ≪Introducing Drosera≫ . WebKit . 28 de junho de 2006 . Consultado em 17 de marco de 2019  
  48. ≪New in JavaScript≫ . MDN Web Docs (em ingles) . Consultado em 17 de marco de 2019  
  49. ≪John Resig - Versions of JavaScript≫ (em ingles) . Consultado em 17 de marco de 2019  
  50. ≪What Version of Javascript≫ . web.archive.org . 9 de janeiro de 2017 . Consultado em 17 de marco de 2019  
  51. John Resig. ≪Versions of JavaScript≫ . Ejohn.org . Consultado em 19 de maio de 2009  

Bibliografia

editar
  • 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

Ligacoes externas

editar
 
Wikilivros
O Wikilivros tem um livro chamado JavaScript
 
Wikilivros