JavaScript é uma linguagem de programação de alto nível e interpretada, usada principalmente para criar aplicações web interativas e dinâmicas. É uma parte essencial do desenvolvimento web, ao lado de HTML e CSS. Originalmente desenvolvida por Brendan Eich enquanto trabalhava na Netscape, JavaScript evoluiu para uma linguagem versátil que suporta estilos de programação orientada a eventos, funcional e imperativa. Agora é uma parte integral das tecnologias web, com um amplo ecossistema que abrange numerosos frameworks, bibliotecas e ambientes de execução, notavelmente o Node.js.
JavaScript foi criado em 1995 sob o nome de Mocha, posteriormente renomeado para LiveScript e, finalmente, para JavaScript para capitalizar a popularidade do Java. A primeira versão foi lançada no Netscape Navigator 2.0, permitindo que os desenvolvedores adicionassem conteúdo dinâmico às páginas web. A linguagem foi padronizada sob a European Computer Manufacturers Association (ECMA) como ECMAScript em 1997, com versões subsequentes introduzindo recursos-chave que expandiram suas capacidades.
A evolução do JavaScript incluiu a introdução de recursos como programação orientada a objetos e programação assíncrona (promessas e callbacks). Notavelmente, o ECMAScript 5 (2009) introduziu o “modo estrito”, suporte a JSON e métodos de array aprimorados, enquanto o ECMAScript 6 (2015), também conhecido como ES6 ou ECMAScript 2015, trouxe mudanças significativas como funções de seta, classes e módulos. O lançamento do ES6 marcou uma mudança de paradigma, pois tornou o JavaScript uma linguagem mais robusta, adequada para o desenvolvimento de aplicações em larga escala.
Hoje, o JavaScript está onipresente no desenvolvimento web, alimentando frameworks de front-end como React, Angular e Vue.js, além do desenvolvimento back-end através do Node.js. A linguagem continua a evoluir com lançamentos anuais do ECMAScript, introduzindo novos recursos e melhorias. Com o uso crescente do JavaScript no desenvolvimento de aplicativos móveis, aplicações de desktop (usando Electron) e até mesmo aplicações em nível empresarial, sua relevância e importância no cenário de desenvolvimento de software permanecem fortes.
JavaScript é uma linguagem de tipagem dinâmica, permitindo que variáveis mantenham valores de qualquer tipo sem declaração de tipo explícita.
let exemplo = "Olá, Mundo!";
exemplo = 42; // Sem erro, exemplo pode mudar de tipo
As funções em JavaScript são cidadãs de primeira classe, o que significa que podem ser atribuídas a variáveis, passadas como argumentos e retornadas de outras funções.
const cumprimentar = function(nome) {
return `Olá, ${nome}`;
};
console.log(cumprimentar("Alice")); // Saída: Olá, Alice
Introduzidas no ES6, as funções de seta fornecem uma sintaxe mais concisa para escrever funções e não vinculam seu próprio this
.
const somar = (a, b) => a + b;
console.log(somar(2, 3)); // Saída: 5
As promessas simplificam a programação assíncrona ao representar um valor que pode estar disponível no futuro.
const buscarDados = () => {
return new Promise((resolver, rejeitar) => {
// simula uma chamada de API
setTimeout(() => resolver("Dados recebidos!"), 1000);
});
};
buscarDados().then(dados => console.log(dados)); // Saída após 1 segundo: Dados recebidos!
Os literais de template permitem fácil interpolação de strings e strings de múltiplas linhas.
const nome = "Alice";
const saudacao = `Olá, ${nome}!`;
console.log(saudacao); // Saída: Olá, Alice!
A atribuição por desestruturação simplifica a extração de valores de arrays ou propriedades de objetos.
const pessoa = { nome: "Alice", idade: 25 };
const { nome, idade } = pessoa;
console.log(nome, idade); // Saída: Alice 25
O operador spread (...
) permite expandir elementos de um iterável, enquanto o operador rest coleta elementos restantes em um array.
const numeros = [1, 2, 3];
const maisNumeros = [...numeros, 4, 5]; // Saída: [1, 2, 3, 4, 5]
const soma = (...args) => args.reduce((a, b) => a + b, 0);
console.log(soma(1, 2, 3)); // Saída: 6
JavaScript suporta programação orientada a objetos baseada em classes com a sintaxe class
introduzida no ES6.
class Animal {
constructor(nome) {
this.nome = nome;
}
falar() {
console.log(`${this.nome} faz um barulho.`);
}
}
const cachorro = new Animal("Cachorro");
cachorro.falar(); // Saída: Cachorro faz um barulho.
JavaScript suporta programação modular através de módulos ES6 que usam as palavras-chave import
e export
.
// modulo.js
export const nome = "Alice";
export function cumprimentar() {
console.log("Olá!");
}
// principal.js
import { nome, cumprimentar } from './modulo.js';
console.log(nome); // Saída: Alice
cumprimentar(); // Saída: Olá!
A sintaxe async/await simplifica o trabalho com promessas, fazendo com que o código assíncrono pareça mais síncrono.
const buscarDados = async () => {
const resposta = await fetch('https://api.exemplo.com/dados');
const dados = await resposta.json();
return dados;
};
buscarDados().then(dados => console.log(dados));
JavaScript é executado em vários ambientes, com motores de navegador como V8 (Chrome) e SpiderMonkey (Firefox) sendo os mais proeminentes. O Node.js permite que o JavaScript seja executado no lado do servidor, capacitando os desenvolvedores a construir aplicações web completas com uma linguagem unificada em ambos os lados, cliente e servidor.
IDEs e editores de código comuns para JavaScript incluem Visual Studio Code, WebStorm, Atom e Sublime Text. Essas ferramentas oferecem recursos como destaque de sintaxe, conclusão inteligente de código e suporte a depuração.
Para configurar um projeto JavaScript, os desenvolvedores normalmente usam gerenciadores de pacotes como npm ou yarn para gerenciar dependências. Uma estrutura típica de projeto inclui um arquivo index.html
para a interface web, um arquivo JavaScript principal (geralmente main.js
) e possivelmente um arquivo package.json
para gerenciar pacotes.
npm init -y # Inicializa um novo projeto JavaScript com configurações padrão
npm install express # Instala o framework Express
JavaScript é usado em uma infinidade de aplicações, incluindo:
Os principais concorrentes e alternativas do JavaScript incluem:
Cada linguagem tem seus próprios pontos fortes e fracos, dependendo das necessidades específicas de um projeto ou aplicação.
Para traduzir código JavaScript para outras linguagens ou vice-versa, pode-se usar ferramentas como Babel (para transpilar JavaScript moderno para versões mais antigas) ou TypeScript (para verificação de tipos e transpilar para JavaScript). Bibliotecas como jQuery também podem ajudar com a manipulação do DOM em diferentes ambientes, fornecendo uma API consistente.
Além do Babel e TypeScript, outras ferramentas podem ajudar na tradução ou conversão de código JavaScript: