Stringhe JavaScript
In JavaScript, le stringhe servono per memorizzare e manipolare testo. Impara a crearle, usarle e confrontarle.
In JavaScript, le stringhe vengono utilizzate per memorizzare e manipolare testo. A differenza di alcuni altri linguaggi, JavaScript non ha un tipo separato per un singolo carattere — un carattere è semplicemente una string di lunghezza 1. Il formato interno di ogni string è sempre UTF-16, motivo per cui ogni carattere è associato a un codice numerico (maggiori dettagli più avanti).
Una string rappresenta zero o più caratteri scritti tra virgolette. Le stringhe sono uno dei tipi di dati primitivi di JavaScript, ma espongono molti metodi utili — vedi metodi dei primitivi per capire perché un tipo primitivo può avere metodi.
In questa pagina imparerai come creare stringhe (con virgolette singole, doppie e backtick), usare caratteri speciali, leggere la lunghezza di una string, accedere ai singoli caratteri, estrarre sottostringhe, cambiare il case, cercare all'interno di una string e confrontare stringhe correttamente.
Funzioni String più comuni
| Funzione | Descrizione |
|---|---|
charAt(index) | Restituisce il carattere all'indice specificato. |
charCodeAt(index) | Restituisce il codice Unicode del carattere all'indice specificato. |
concat(...strings) | Concatena gli argomenti string alla string chiamante e restituisce una nuova string. |
includes(searchString, position) | Determina se la string chiamante contiene searchString. |
indexOf(searchValue, fromIndex) | Restituisce l'indice della prima occorrenza di searchValue nella string, iniziando la ricerca da fromIndex. Restituisce -1 se il valore non viene trovato. |
lastIndexOf(searchValue, fromIndex) | Restituisce l'indice dell'ultima occorrenza di searchValue nella string chiamante, cercando all'indietro da fromIndex. Restituisce -1 se il valore non viene trovato. |
match(regexp) | Recupera le corrispondenze quando si fa combaciare una string con un'espressione regolare. |
matchAll(regexp) | Restituisce un iteratore di tutti i risultati che corrispondono a una string rispetto a un'espressione regolare, inclusi i gruppi di cattura. |
repeat(count) | Restituisce una nuova string composta dalla string chiamante ripetuta count volte. |
replace(searchFor, replaceWith) | Sostituisce la prima corrispondenza di una sottostringa o pattern con una string di sostituzione. |
replaceAll(searchFor, replaceWith) | Sostituisce tutte le corrispondenze di una sottostringa o pattern con una string di sostituzione. |
search(regexp) | Cerca nella string una corrispondenza con un'espressione regolare e restituisce l'indice della corrispondenza. |
slice(startIndex, endIndex) | Estrae una sezione di una string e la restituisce come nuova string, senza modificare la string originale. |
split(separator, limit) | Divide una string in un elenco ordinato di sottostringhe, inserisce queste sottostringhe in un array e restituisce l'array. La divisione viene effettuata cercando un pattern; il pattern è fornito come primo parametro nella chiamata al metodo. |
startsWith(searchString, position) | Determina se la string chiamante inizia con i caratteri di searchString. |
substring(startIndex, endIndex) | Restituisce la parte della string compresa tra gli indici di inizio e fine, o fino alla fine della string. |
toLowerCase() | Restituisce il valore della string chiamante convertito in minuscolo. |
toUpperCase() | Restituisce il valore della string chiamante convertito in maiuscolo. |
trim() | Rimuove gli spazi bianchi da entrambe le estremità della string. |
trimStart() o trimLeft() | Rimuove gli spazi bianchi dall'inizio della string. |
trimEnd() o trimRight() | Rimuove gli spazi bianchi dalla fine della string. |
valueOf() | Restituisce il valore primitivo di un oggetto String. |
Le virgolette
JavaScript offre tre modi per racchiudere una string: virgolette singole, virgolette doppie e backtick:
let single = 'single-quoted';
let double = "double-quoted";
let backticks = `backticks`;Le virgolette singole e doppie si comportano in modo identico — scegli uno stile e mantienilo. I backtick sono diversi: supportano i template literal, consentendo di incorporare qualsiasi espressione direttamente nella string racchiudendola in ${…}:
L'espressione all'interno di ${…} può essere qualsiasi cosa — una variabile, un calcolo o una chiamata a funzione:
Un altro vantaggio chiave dei backtick è che permettono a una string di estendersi su più righe:
Le virgolette singole e doppie non possono estendersi su più righe da sole. Inserire un'interruzione di riga grezza al loro interno è un errore di sintassi:
let guestList = "Guests: // SyntaxError: Invalid or unexpected token
* John ";Le virgolette singole e doppie sono precedenti ai backtick, quindi i backtick sono la scelta più moderna e potente.
Puoi anche inserire una "funzione template" (un tagged template) prima del primo backtick:
func`string`;La funzione func viene chiamata automaticamente e riceve le parti letterali della string insieme alle espressioni incorporate, in modo da poterle elaborare. È così che le librerie implementano template personalizzati, ma nel codice quotidiano è raramente necessario.
Caratteri speciali
Puoi creare output su più righe da stringhe con virgolette singole o doppie con l'aiuto di \n (il carattere di nuova riga), in questo modo:
Esistono altri caratteri speciali meno comuni.
Ecco alcuni di essi nell'elenco seguente:
- \', \" questi caratteri speciali vengono usati per le virgolette
- \r - ritorno a capo. Questo carattere viene ora usato da solo. Una combinazione di due caratteri \r\n viene usata per rappresentare un'interruzione di riga nei file di testo Windows.
- \\ - barra rovesciata
- \t - tabulazione
- \xXX - carattere unicode con un particolare codice unicode esadecimale XX
- \uXXXX - simbolo unicode con il codice esadecimale XXXX nella codifica UTF-16. Deve includere esattamente 4 cifre.
Ecco esempi con escape Unicode:
Ogni carattere speciale inizia con una barra rovesciata, ed è per questo che la barra rovesciata è chiamata anche carattere di escape. Puoi usarla per inserire una virgoletta corrispondente all'interno di una string:
La barra rovesciata esiste solo per dire a JavaScript come leggere il codice sorgente — scompare una volta creata la string, quindi non viene memorizzata. Quando hai effettivamente bisogno di una barra rovesciata nella string, raddoppiala:
La lunghezza della string
La proprietà length ti fornisce il numero di caratteri in una string:
Nota che \n è un singolo carattere speciale, quindi la lunghezza è 7 (W3Docs più una nuova riga), non 8.
Un errore comune è chiamare str.length() invece di leggere str.length. length è una proprietà, non un metodo — aggiungere () genera un errore "not a function".
Accesso ai caratteri
Le parentesi quadre [pos] sono il modo comune per ottenere il carattere a una determinata posizione. Puoi anche chiamare il metodo str.charAt(pos). Le posizioni sono zero-based, quindi il primo carattere si trova all'indice 0:
Una differenza: se non esiste alcun carattere alla posizione, str[pos] restituisce undefined mentre str.charAt(pos) restituisce una string vuota ''. Il codice moderno preferisce generalmente le parentesi quadre; charAt è raramente usato oggi.
Le stringhe sono immutabili
Le stringhe in JavaScript sono immutabili — non puoi modificare un carattere nel posto. L'assegnazione seguente fallisce silenziosamente (in strict mode genera un'eccezione), quindi il carattere originale rimane invariato:
Invece, costruisci una nuova string completa e assegnala alla variabile:
Cambiare il case
Due metodi cambiano il case di un'intera string — toUpperCase() e toLowerCase():
Per convertire in minuscolo solo un singolo carattere, prima indicizza la string, poi chiama il metodo su quel carattere:
Cercare una sottostringa
Esistono diversi modi per cercare una sottostringa all'interno di una string.
str.indexOf
str.indexOf(substr, pos) cerca substr all'interno di str, opzionalmente iniziando dalla posizione pos. Restituisce l'indice della prima corrispondenza, o -1 se non c'è corrispondenza:
str.lastIndexOf
str.lastIndexOf(substr, pos) funziona come indexOf, ma cerca dalla fine della string verso l'inizio, restituendo l'indice dell'ultima corrispondenza.
Un errore comune: non usare indexOf direttamente in un test if. Poiché una corrispondenza alla posizione 0 è falsy, questo sembra corretto ma è sbagliato:
Confronta sempre con -1 invece:
includes, startsWith, endsWith
Il più moderno str.includes(substr, pos) restituisce true o false a seconda che str contenga substr. Usalo quando hai solo bisogno di sapere se esiste una corrispondenza, non dove:
Il suo secondo argomento opzionale è la posizione da cui iniziare la ricerca:
str.startsWith(substr) e str.endsWith(substr) sono strettamente correlati — testano rispettivamente l'inizio e la fine della string:
Ottenere una sottostringa
JavaScript ha tre metodi per ottenere una sottostringa: slice, substring e substr. Nel codice moderno, slice è quello raccomandato — è il più flessibile e substr è considerato legacy.
str.slice(start, end)
slice restituisce la parte della string da start fino a (ma non includendo) end:
Se il secondo argomento è omesso, slice procede fino alla fine della string:
Puoi anche usare valori negativi, che contano dalla fine:
str.substring(start, end)
substring restituisce la parte della string compresa tra start e end. È molto simile a slice, con una differenza notevole: se start è maggiore di end, substring scambia i due argomenti, mentre slice restituisce una string vuota. Tratta anche gli argomenti negativi come 0:
str.substr(start, length)
substr restituisce la parte della string a partire da start con una determinata length. A differenza degli altri, il suo secondo argomento è una lunghezza, non una posizione finale. Questo metodo è legacy — preferisci slice nel nuovo codice.
Un start negativo conta dalla fine:
Confronto di stringhe
Gli operatori <, >, <= e >= confrontano le stringhe carattere per carattere, usando il codice Unicode di ogni carattere (vedi operatori di confronto per le regole generali). Due conseguenze sorprendono spesso i nuovi sviluppatori:
- Una lettera minuscola è "maggiore" di una maiuscola, perché le lettere minuscole hanno codici più alti:
- Le lettere con segni diacritici si ordinano "fuori ordine" — si trovano al di fuori dell'intervallo A–Z di base, quindi vengono confrontate come maggiori:
Per questo motivo, gli operatori di confronto vanno bene per ordinare strettamente per codice, ma non per un ordine alfabetico leggibile dall'utente. Per un confronto che rispetti le impostazioni locali, usa str.localeCompare(other), che restituisce un numero negativo, 0 o un numero positivo:
Caratteri e i loro codici
Poiché le stringhe sono UTF-16, ogni carattere ha un codice numerico. str.codePointAt(pos) restituisce il codice del carattere alla posizione pos:
String.fromCodePoint(code) fa l'operazione inversa — costruisce un carattere da un codice numerico:
Puoi anche inserire un carattere tramite il suo codice in un letterale string usando \u seguito dal codice esadecimale:
Come esempio più completo, ecco una string costruita dai caratteri con codici da 65 a 220:
Le lettere maiuscole vengono prima, poi alcuni caratteri speciali, e l'output termina intorno a Ö.
Argomenti correlati
- Tipi di dati JavaScript — dove le stringhe si collocano tra i primitivi.
- Metodi dei primitivi — come una string primitiva può avere metodi.
- Numeri — il tipo primitivo complementare.
- Operatori di confronto — le regole di confronto complete.
- Metodi degli array — utili dopo che
split()trasforma una string in un array.