JavaScript è un linguaggio di programmazione interpretato di alto livello, principalmente utilizzato per creare applicazioni web interattive e dinamiche. È una parte essenziale dello sviluppo web, insieme a HTML e CSS. Sviluppato originariamente da Brendan Eich mentre lavorava per Netscape, JavaScript è evoluto in un linguaggio versatile che supporta stili di programmazione basati su eventi, funzionali e imperativi. Oggi è una parte integrante delle tecnologie web, con un ampio ecosistema che comprende numerosi framework, librerie e ambienti di runtime, in particolare Node.js.
JavaScript è stato creato nel 1995 con il nome di Mocha, successivamente rinominato in LiveScript e infine in JavaScript per capitalizzare la popolarità di Java. La prima versione è stata rilasciata in Netscape Navigator 2.0, consentendo agli sviluppatori di aggiungere contenuti dinamici alle pagine web. Il linguaggio è stato standardizzato sotto l'European Computer Manufacturers Association (ECMA) come ECMAScript nel 1997, con versioni successive che hanno introdotto funzionalità chiave che ne hanno ampliato le capacità.
L'evoluzione di JavaScript ha incluso l'introduzione di funzionalità come la programmazione orientata agli oggetti e la programmazione asincrona (promesse e callback). In particolare, ECMAScript 5 (2009) ha introdotto la "modalità rigorosa", il supporto per JSON e metodi migliorati per gli array, mentre ECMAScript 6 (2015), noto anche come ES6 o ECMAScript 2015, ha portato cambiamenti significativi come le funzioni freccia, le classi e i moduli. Il rilascio di ES6 ha segnato un cambiamento di paradigma, poiché ha reso JavaScript un linguaggio più robusto adatto allo sviluppo di applicazioni su larga scala.
Oggi, JavaScript è onnipresente nello sviluppo web, alimentando framework front-end come React, Angular e Vue.js, oltre allo sviluppo back-end tramite Node.js. Il linguaggio continua a evolversi con rilasci annuali di ECMAScript, introducendo nuove funzionalità e miglioramenti. Con l'uso crescente di JavaScript nello sviluppo di app mobili, applicazioni desktop (utilizzando Electron) e persino applicazioni a livello enterprise, la sua rilevanza e importanza nel panorama dello sviluppo software rimangono forti.
JavaScript è un linguaggio a tipizzazione dinamica, consentendo alle variabili di contenere valori di qualsiasi tipo senza dichiarazione esplicita del tipo.
let esempio = "Ciao, Mondo!";
esempio = 42; // Nessun errore, esempio può cambiare tipo
Le funzioni in JavaScript sono cittadini di prima classe, il che significa che possono essere assegnate a variabili, passate come argomenti e restituite da altre funzioni.
const saluta = function(nome) {
return `Ciao, ${nome}`;
};
console.log(saluta("Alice")); // Output: Ciao, Alice
Introdotte in ES6, le funzioni freccia forniscono una sintassi più concisa per scrivere funzioni e non legano il proprio this
.
const somma = (a, b) => a + b;
console.log(somma(2, 3)); // Output: 5
Le promesse semplificano la programmazione asincrona rappresentando un valore che potrebbe essere disponibile in futuro.
const recuperaDati = () => {
return new Promise((risolvi, rifiuta) => {
// simula una chiamata API
setTimeout(() => risolvi("Dati ricevuti!"), 1000);
});
};
recuperaDati().then(dati => console.log(dati)); // Output dopo 1 secondo: Dati ricevuti!
I template literals consentono una facile interpolazione delle stringhe e stringhe su più righe.
const nome = "Alice";
const saluto = `Ciao, ${nome}!`;
console.log(saluto); // Output: Ciao, Alice!
L'assegnazione destrutturante semplifica l'estrazione di valori da array o proprietà da oggetti.
const persona = { nome: "Alice", età: 25 };
const { nome, età } = persona;
console.log(nome, età); // Output: Alice 25
L'operatore spread (...
) consente di espandere elementi da un iterabile, mentre l'operatore rest raccoglie gli elementi rimanenti in un array.
const numeri = [1, 2, 3];
const piùNumeri = [...numeri, 4, 5]; // Output: [1, 2, 3, 4, 5]
const somma = (...args) => args.reduce((a, b) => a + b, 0);
console.log(somma(1, 2, 3)); // Output: 6
JavaScript supporta la programmazione orientata agli oggetti basata su classi con la sintassi class
introdotta in ES6.
class Animale {
constructor(nome) {
this.nome = nome;
}
parla() {
console.log(`${this.nome} fa un rumore.`);
}
}
const cane = new Animale("Cane");
cane.parla(); // Output: Cane fa un rumore.
JavaScript supporta la programmazione modulare tramite i moduli ES6 che utilizzano le parole chiave import
ed export
.
// modulo.js
export const nome = "Alice";
export function saluta() {
console.log("Ciao!");
}
// main.js
import { nome, saluta } from './modulo.js';
console.log(nome); // Output: Alice
saluta(); // Output: Ciao!
La sintassi async/await semplifica il lavoro con le promesse, rendendo il codice asincrono più simile a quello sincrono.
const recuperaDati = async () => {
const risposta = await fetch('https://api.example.com/data');
const dati = await risposta.json();
return dati;
};
recuperaDati().then(dati => console.log(dati));
JavaScript viene eseguito in vari ambienti, con motori per browser come V8 (Chrome) e SpiderMonkey (Firefox) che sono i più prominenti. Node.js consente l'esecuzione di JavaScript lato server, permettendo agli sviluppatori di costruire applicazioni web complete con un linguaggio unificato sia per il client che per il server.
IDE e editor di codice comuni per JavaScript includono Visual Studio Code, WebStorm, Atom e Sublime Text. Questi strumenti offrono funzionalità come evidenziazione della sintassi, completamento intelligente del codice e supporto per il debug.
Per impostare un progetto JavaScript, gli sviluppatori utilizzano tipicamente gestori di pacchetti come npm o yarn per gestire le dipendenze. Una struttura tipica del progetto include un file index.html
per l'interfaccia web, un file JavaScript principale (spesso main.js
) e possibilmente un file package.json
per la gestione dei pacchetti.
npm init -y # Inizializza un nuovo progetto JavaScript con impostazioni predefinite
npm install express # Installa il framework Express
JavaScript è utilizzato in una miriade di applicazioni, tra cui:
I principali concorrenti e alternative di JavaScript includono:
Ogni linguaggio ha i propri punti di forza e debolezza a seconda delle esigenze specifiche di un progetto o di un'applicazione.
Per tradurre codice JavaScript in altri linguaggi o viceversa, è possibile utilizzare strumenti come Babel (per transpiling JavaScript moderno in versioni più vecchie) o TypeScript (per il controllo dei tipi e il transpiling in JavaScript). Librerie come jQuery possono anche aiutare con la manipolazione del DOM attraverso diversi ambienti fornendo un'API coerente.
Oltre a Babel e TypeScript, altri strumenti possono assistere nella traduzione o conversione del codice JavaScript: