Le stringhe in JavaScript
Manipolazione di stringhe
Le stringhe sono tra i tipi di dato più utilizzati. In JavaScript offrono numerosi metodi che permettono di eseguire ricerche, sostituzioni, estrazioni di sottostringhe e trasformazioni del testo.
Concetti chiave
Le stringhe sono immutabili: ogni metodo restituisce una nuova stringa e si definiscono con apici singoli '
, doppi "
o backtick `
(template literal).
Esempio: creazione, lunghezza e accesso ai caratteri

let s1 = "Ciao";
let s2 = 'JavaScript';
let s3 = `Interpolazione: ${s1} ${s2}`; // template literal con ${}
// length e accesso
console.log(s1.length); // 4 → numero di caratteri
console.log(s2[0]); // "J" → accesso per indice
console.log(s2.charAt(4)); // "S" → accesso con charAt
console.log(s3); // "Interpolazione: Ciao JavaScript"
Trasformazioni di base
Maiuscole/minuscole, spazi, padding e ripetizione

let frase = " Benvenuto in JavaScript ";
console.log(frase.toUpperCase()); // " BENVENUTO IN JAVASCRIPT "
console.log(frase.toLowerCase()); // " benvenuto in javascript "
console.log(frase.trim()); // "Benvenuto in JavaScript" → rimuove spazi ai bordi
console.log("7".padStart(3, "0")); // "007" → padding a sinistra
console.log("ok".repeat(3)); // "okokok" → ripetizione
Ricerca e verifica
indexOf, lastIndexOf, includes, startsWith, endsWith

let t = "Imparare JavaScript è divertente";
console.log(t.indexOf("Java")); // 9 → prima occorrenza
console.log(t.lastIndexOf("e")); // indice dell'ultima "e"
console.log(t.includes("divertente")); // true → presenza sottostringa
console.log(t.startsWith("Imparare")); // true → inizio
console.log(t.endsWith("te")); // true → fine
Sostituzione
replace vs replaceAll e uso base delle regex

let s = "rosso, Rosso, ROSSO";
// replace sostituisce solo la prima occorrenza
console.log(s.replace("rosso", "blu")); // "blu, Rosso, ROSSO"
// replaceAll sostituisce tutte le occorrenze esatte
console.log(s.replaceAll("rosso", "verde")); // "verde, Rosso, ROSSO"
// regex con flag i (case-insensitive) e g (globale)
console.log(s.replace(/rosso/gi, "giallo")); // "giallo, giallo, giallo"
Estrazione di sottostringhe
slice(inizio, fine)
accetta indici negativi.substring(inizio, fine)
scambia gli indici se invertiti e non accetta negativi.substr
è obsoleto.
slice vs substring (con note sui negativi)

let w = "JavaScript";
console.log(w.slice(0, 4)); // "Java" → da 0 escluso 4
console.log(w.slice(-6)); // "Script" → indici negativi contano da destra
console.log(w.substring(4, 0)); // "Java" → scambia 4 e 0
// sconsigliato: substr(posizione, lunghezza)
// console.log(w.substr(4, 6)); // "Script" (obsoleto)
Divisione e concatenazione
split, join (via array), concatenazione e template literal

let elenco = "pane,latte,uova";
let arr = elenco.split(","); // ["pane","latte","uova"]
console.log(arr.join(" - ")); // "pane - latte - uova" → unione con separatore
let nome = "Mario", cognome = "Rossi";
// concatenazione classica
console.log(nome + " " + cognome); // "Mario Rossi"
// template literal con variabili
console.log(`${nome} ${cognome}`); // "Mario Rossi"
Confronto locale e normalizzazione
localeCompare e normalize

let a = "caffè";
let b = "caffe";
// confronto secondo regole locali (accenti, ordine alfabetico)
console.log(a.localeCompare(b, "it", {sensitivity: "base"})); // 0 => considerati uguali in "it"
// normalizzazione Unicode (utile per confronti binari coerenti)
let n1 = a.normalize("NFC");
let n2 = b.normalize("NFC");
console.log(n1 === n2); // false → stringhe diverse a livello di codice
Tabella riassuntiva
Metodo | Descrizione | Esempio sintetico |
---|---|---|
length | Lunghezza della stringa | "ciao".length → 4 |
toUpperCase() / toLowerCase() | Maiuscolo/minuscolo | "Ok".toLowerCase() |
trim() / trimStart() / trimEnd() | Rimuove spazi ai bordi | " c ".trim() |
indexOf() / lastIndexOf() | Ricerca posizione | "abc".indexOf("b") |
includes() / startsWith() / endsWith() | Presenza/inizio/fine | "test".includes("es") |
replace() / replaceAll() | Sostituzione singola/tutte | s.replaceAll("a","-") |
slice() / substring() | Estrazione porzioni | "abc".slice(-2) |
split() | Divisione in array | "a,b".split(",") |
padStart() / padEnd() | Padding a sinistra/destra | "7".padStart(3,"0") |
repeat() | Ripetizione | "ha".repeat(3) |
localeCompare() | Confronto locale | a.localeCompare(b,"it") |
normalize() | Normalizza Unicode | s.normalize("NFC") |
Considerazioni
Le stringhe sono immutabili: ogni operazione produce una nuova stringa. Per concatenare preferisci i template literal quando inserisci variabili o espressioni.