JavaScript Visão Geral

Este capítulo é uma introdução sobre a linguagem JavaScript e discute alguns dos conceitos fundamentais.

O que é o JavaScript?

JavaScript é uma linguagem script multiplataforma orientada a objetos. JavaScript é pequena e leve; não é usada sozinha e foi feita para ser facilmente usada por outros produtos e aplicações como navegadores web. Dentro de um ambiente, JavaScript pode se comunicar com os objetos que lá existem para estabelecer controle sobre eles.

O núcleo do JavaScript contém um grupo básico de objetos como: Array, Date, e Math, e um grupo básico de elementos de linguagem como: operadores, estruturas de controle e declarações. O núcleo JavaScript pode ser extendido para diversas outras propostas através da complementação com objetos adicionais, como por exemplo:

  • JavaScript - no cliente extende a linguagem básica através do fornecimento de objetos para controle do navegador(Navigator ou outro navegador web) e seus Modelos de Objeto de Documento (DOM). Por exemplo, extensões no lado do cliente permitem que uma aplicação coloque elementos em um formulário HTML e estes respondam a cliques do mouse, entrada de dados em formulário e navegação na página.
  • JavaScript - no servidor extende a liguagem básica fornecendo objetos relevantes para a execução de JavaScript no servidor. Por exemplo, extensões no servidor que permitem uma aplicação se comunicar com um banco de dados relacional, provendo continuidade da informação, ou realizando manipulações no servidor.

Através da funcionalidades JavaScript LiveConnect, você pode permitir que o código Java e o código JavaScript se comuniquem. A partir do JavaScript, você pode instanciar objetos Java e acessar os métodos e atributos públicos. A partir do Java, você pode acessar objetos, propriedades e métodos de JavaScript.

A Netscape inventou o JavaScript, e JavaScript foi usado primeiramente nos navegadores Netscape.

JavaScript e Java

JavaScript e Java são similares em alguns aspectos mas completamente diferentes em outros. A linguagem JavaScript lembra Java mas não tem tipos estáticos e tipificação forte como o Java. O JavaScript se assemelha em grande parte com o Java referente a sintaxe das expressões, convenção de nomes e fluxo básico de controle. Isto foi o que fez com que a linguagem fosse renomeada de LiveScript para JavaScript.

Contrastando com a forma do sistema de compilação de classes construído por declaração do Java, JavaScript usa um sistema de execução em tempo real baseado em um pequeno número de tipos de dados como números, tipos Lógicos e variáveis de texto. JavaScript tem um modelo de objetos baseado em protótipos ao invés do modelo comum baseado em classes. O modelo baseado em protótipos provê herança dinâmica; que é o quanto uma herança pode variar para objetos individuais. JavaScript também suporta funções sem qualquer declaração especial de requisitos. Funções podem ser propriedades de objetos, sendo executadas como objetos tipados livres.

JavaScript é uma linguagem com mais liberdade de padrões se comparado ao Java. Você não precisa declarar todas as variáveis, classes e métodos. Você não precisa se preocupar quando um método é público, privado ou protegido, e você não precisa implementar interfaces. Variáveis, parâmetros e tipos de retorno de funções não são explicitamente declarados.

Java é uma linguagem de programação baseada em classes projetada para execução rápida e tipificação segura. Tipificação segura significa, por exemplo, que você não pode usar um inteiro em Java como uma referência a um objeto ou acessar a memória privada pois corrompe o código Java. O modelo Java baseado em classe significa que os programas consistem exclusivamente de classes e seus métodos.  A herança em Java é fortemente tipificada geralmente requerendo um forte hierarquia de objetos. Estes requisitos fazem a programação Java ser mais complexa que a programação JavaScript.

Ao contrário, JavaScript segue a linha de linguagens menores e dinâmicamente tipadas como HyperTalk e dBASE. Estas linguagens de script oferecem ferramentas de programação para um público muito maior por causa da sua sintaxe mais fácil, funcionalidades especializadas nativas, e requisitos mínimos para criação de objetos.

Tabela 1.1 JavaScript comparado ao Java
JavaScript Java
Orientado a objetos. Sem distinção entre tipos e objtetos. Herança feita através do mecanismo de protótipo, e propriedades e métodos podem ser adicionadas para qualquer tipo de objeto dinamicamente. Baseado em classes. Objetos são divididos em classes e instâncias com toda a herança através da hierarquia de classes. Classes e instâncias não podem ter propriedades ou métodos adicionados dinamicamente.
Tipo de dado de variável não declarado (dinâmicamente definido). Tipo de dado de variável deve ser declarado (estaticamente definido).
Não pode automaticamente escrever no disco rígido. Não pode automaticamente escrever no disco rígido.

Para mais informações quanto as diferenças entre JavaScript e Java, veja o capítulo Details of the Object Model.

JavaScript e a Especificação ECMAScript

A Netscape criou o JavaScript, e o JavaScript foi usado pela primeira vez nos navegadores Netscape. Entretanto, o Netscape trabalha com a Ecma International — a Associação Européia para padronização da informação e comunicação de sistemas (ECMA era antigamente um acrônimo para Associação Européia de Produtores de Computador) para disponibilizar uma linguagem internacional padronizada baseada no núcleo do JavaScript. Esta versão padronizada do JavaScript, chamada ECMAScript, comportava-se da mesma forma em todas as aplicações que suportavam o padrão. Empresas podem usar a linguagem padrão aberta para desenvolver suas implementações de JavaScript. O patrão ECMAScript é documentado na especificação ECMA-262.

O padrão ECMA-262 foi aprovado pelo ISO (Organização Internacional de Padronização) as ISO-16262. Você pode encontrar uma PDF version of ECMA-262 (versão desatualizada) no site da Mozilla. Você também pode encontrar a especificação no the Ecma International website. A especificação do ECMAScript não descreve o Modelo de Objeto de Documento (DOM), que é padronizado pelo World Wide Web Consortium (W3C). O DOM define a forma na qual objetos de documento HTML são expostos no script.

Relações entre Versões JavaScript e Edições ECMAScript

A Netscape trabalhou juntamente com a Ecma Internacional para produzir a Especificação ECMAScript (ECMA-262). A tabela a seguir descreve a relação entre versões JavaScript e edições ECMAScript.

Tabela 1.2 versões JavaScript e edições ECMAScript
Versão JavaScript Relação com a edição ECMAScript
JavaScript 1.1 ECMA-262, A edição 1 é baseada no JavaScript 1.1.
JavaScript 1.2 ECMA-262 não estava completa quando o JavaScript 1.2 foi liberado. JavaScript 1.2 não é totalmente compatível com ECMA-262, Edição 1, pelos seguintes motivos:
  • Netscape desenvolveu funcionalidades adicionais no JavaScript 1.2 que não foram consideradas para o ECMA-262.
  • ECMA-262 adicionou duas novas funcionalidades: internacionalização usando Unicode, e comportamento uniforme entre as plataformas. Diversas funcionalidades do JavaScript 1.2, com o objeto Date , eram dependentes de plataforma e com comportamentos específicos.

JavaScript 1.3

JavaScript 1.3 é totalmente compatível com ECMA-262, Edição 1.

JavaScript 1.3 resolveu as inconsistências que o JavaScript 1.2 tinha com o ECMA-262, enquanto manteve todas as funcionalidades adicionais do JavaScript 1.2 exceto == e !=, que foram modificados conforme o ECMA-262.

JavaScript 1.4

JavaScript 1.4 é totalmente compatível com ECMA-262, Edição 1.

A terceira versão da especificação do ECMAScript não foi finalizada quando o JavaScript 1.4 foi liberado.

JavaScript 1.5 JavaScript 1.5 é totalmente compatível com ECMA-262, Edição 3.
Note: ECMA-262, Edição 2 consiste em pequenas alterações de artigo e correções de defeitos da especificação da Edition 1. A versão atual liberada pelo grupo de trabalho TC39 do Ecma Internacional é ECMAScript Edição 5.1

A JavaScript Reference indica quais funcionalidades da linguagem são compatíveis com ECMAScript.

JavaScript sempre incluirá funcionalidades que não são parte da especificação ECMAScript; JavaScript é compatível com ECMAScript, enquanto provém funcionalidades adicionais.

Documentação JavaScript verso Especificação ECMAScript

A especificação ECMAScript é um grupo de requisitos para implementar ECMAScript; é útil se você quer determinar quando uma funcionalidade JavaScript é suportada em outra implementação ECMAScript. Se você planeja escrever código JavaScript que use apenas funcionalidades suportadas pela ECMAScript, então você pode precisar rever a especificação ECMAScript.

O documento ECMAScript não serve para ensinar a programar scripts; use a documentação como uma referência sobre a linguagem JavaScript.

JavaScript e a terminologia ECMAScript

A especificação do uso da terminologia e sintaxe do ECMAScript pode não ser familiar para um programador JavaScript. Embora a descrição da linguagem possa diferir no ECMAScript, a linguagem por si só permanece a mesma. O JavaScript suporta todas as funcionalidades pertencentes a especificação ECMAScript.

A documentação JavaScript descreve aspectos da linguagem que são apropriados ao programador JavaScript. Exemplo:

  • O Global Object não é discutido na documentação JavaScript porque você não precisa usar ele diretamente. Os métodos e propriedades do Global Object, que você usa, são discutidos na documentação JavaScript mas são chamados funções e propriedades de alto nível.
  • O construtor sem parâmetro (zero-argumento) com objetos Number e String não são discutidos na documentação JavaScript, porque o que é gerado é de pouco uso. O construtor Number sem um argumento retorna +0, e um construtor String sem um argumento retorna "" (uma string vazia).

Document Tags and Contributors

Contributors to this page: LeonardoM
Última atualização por: LeonardoM,