Introduction
JavaScript è un linguaggio dinamico, multiparadigma, eseguito nel browser e in ambienti server come Node.js.
Questa guida sintetizza i fondamenti operativi necessari per essere produttivi nel quotidiano.
- Ecosistema maturo e multipiattaforma.
- Standard ECMAScript in evoluzione continua.
- Tooling moderno per sviluppo, build e test.
// Avvio rapido
console.log('Hello, JavaScript');
What you should already know
Conoscenze pregresse suggerite per una lettura agevole della documentazione.
- Base di HTML e CSS.
- Concetti di programmazione (variabili, funzioni, condizioni).
- Familiarità con strumenti da riga di comando.
Non sono prerequisiti assoluti, ma accelerano l’apprendimento.
<!-- Questa guida non sostituisce MDN -->
JavaScript and Java
Nonostante il nome simile, i due linguaggi hanno storie e modelli di esecuzione differenti.
JavaScript è tipizzato dinamicamente e adotta un modello a oggetti basato su prototipi.
// JS dinamico
let x = 1;
x = 'test'; // valido
La somiglianza sintattica non implica compatibilità diretta.
Hello world
Il primo programma aiuta a verificare ambiente e strumenti.
<script>
document.addEventListener('DOMContentLoaded', () => {
console.log('Hello world');
});
</script>
Puoi eseguire lo stesso codice da console DevTools per una verifica immediata.
Variables
Le variabili si dichiarano con let
o const
. L’uso di var
è legacy.
const PI = 3.1416;
let counter = 0;
const
non rende l’oggetto immutabile: blocca il riassegnamento del binding.
Declaring variables
La dichiarazione definisce il binding nel relativo scope.
// block scope
{
let a = 1;
const b = 2;
}
L’assenza di dichiarazione implicita (strict mode) previene errori difficili da tracciare.
Variable scope
let
e const
hanno scope di blocco; var
ha scope di funzione e
hoisting.
function f() {
if (true) {
let x = 1;
}
// x non è definita qui
}
Preferire sempre let
/const
per prevedibilità.
Global variables
Le globali complicano il reasoning e favoriscono collisioni di nome: limitarne l’uso.
// Evitare pattern globali non necessari
window.App = window.App || {};
Moduli ES e closure offrono alternative strutturate.
Constants
const
definisce un binding non riassegnabile.
const config = { debug: false };
config.debug = true; // ok (mutazione)
config = {}; // errore (riassegnazione)
Per oggetti realmente immutabili valutare Object.freeze
o librerie dedicate.
Data types
Tipi primitivi: number, string, boolean, null, undefined, symbol, bigint.
- Gli oggetti sono collezioni dinamiche di proprietà.
- Gli array sono oggetti specializzati con metodi funzionali.
- Le funzioni sono oggetti di prima classe.
typeof 1n; // 'bigint'
typeof Symbol(); // 'symbol'
if...else statement
Struttura di controllo condizionale per eseguire rami diversi in base a un’espressione booleana.
if (value > 0) {
// ...
} else if (value === 0) {
// ...
} else {
// ...
}
Per condizioni semplici considera l’operatore ternario.
while statement
Esegue un blocco finché la condizione rimane vera.
let i = 0;
while (i < 3) {
i++;
}
Garantire sempre condizioni di uscita per evitare loop infiniti.
Function declarations
Le dichiarazioni sono hoistate; le espressioni e le arrow function no (nel binding).
function sum(a, b) { return a + b; }
const mul = (a, b) => a * b;
Usare nomi descrittivi e firma coerente con il dominio.
Reference
Per approfondire concetti e API utilizzare sempre fonti primarie e aggiornate.
// Esempio link rapido
window.open('https://developer.mozilla.org/');