Introduzione ai Tipi di Dato in Javascript

Concetti Chiave
  • I tipi di dato in Javascript possono essere divisi in due categorie: primitivi e oggetto.
  • I tipi primitivi includono numeri, stringhe, booleani, null, undefined e symbol.
  • Gli oggetti sono collezioni di proprietà e possono essere mutabili o immutabili.
  • Javascript supporta la programmazione orientata agli oggetti, con metodi definiti sui tipi per operare sui valori.

Introduzione ai tipi di dato

I tipi JavaScript possono essere divisi in due categorie:

  1. tipi primitivi;
  2. tipi oggetto.

I tipi primitivi di JavaScript includono numeri, stringhe di testo (note semplicemente come stringhe), e valori di verità booleani (noti come booleani).

I valori speciali JavaScript null e undefined sono valori primitivi, ma non sono numeri, stringhe o booleani. Ogni valore è tipicamente considerato come l'unico membro del proprio tipo speciale. ES6 aggiunge un nuovo tipo per scopi speciali, noto come Symbol, che consente la definizione di estensioni del linguaggio senza danneggiare la compatibilità con le versioni precedenti. Tratteremo i Symbol brevemente più avanti.

Qualsiasi valore JavaScript che non sia un numero, una stringa, un booleano, un symbol, null, o undefined è un oggetto. Un oggetto (cioè, un membro del tipo oggetto) è una collezione di proprietà dove ogni proprietà ha un nome e un valore (sia un valore primitivo o un altro oggetto).

Un oggetto JavaScript ordinario è una collezione non ordinata di valori dotati di nome. Il linguaggio definisce anche un tipo speciale di oggetto, noto come array, che rappresenta una collezione ordinata di valori numerati. Il linguaggio JavaScript include una sintassi speciale per lavorare con gli array, e gli array hanno alcuni comportamenti speciali che li distinguono dagli oggetti ordinari.

Oltre agli oggetti di base e agli array, JavaScript definisce un numero di altri tipi di oggetto utili. Un oggetto Set rappresenta un insieme di valori. Un oggetto Map rappresenta una mappa (o associazione) da chiavi a valori. Vari tipi di "array tipizzati" facilitano le operazioni su array di byte e altri dati binari. Il tipo RegExp rappresenta pattern testuali e abilita operazioni sofisticate di corrispondenza, ricerca e sostituzione su stringhe. Il tipo Date rappresenta date e orari e supporta aritmetica rudimentale delle date. Error e i suoi sottotipi rappresentano errori che possono sorgere durante l'esecuzione del codice JavaScript.

JavaScript differisce dai linguaggi più statici in quanto le funzioni e le classi non sono solo parte della sintassi del linguaggio: sono esse stesse valori che possono essere manipolati dai programmi JavaScript. Come qualsiasi valore JavaScript che non sia un valore primitivo, le funzioni e le classi sono un tipo specializzato di oggetto.

L'interprete JavaScript esegue l'eliminazione automatica dei dati per la gestione della memoria attraverso un processo noto come garbage collection. Questo significa che un programmatore JavaScript generalmente non deve preoccuparsi della distruzione o de-allocazione di oggetti o altri valori. Quando un valore non è più raggiungibile, ossia quando un programma non ha più alcun modo per riferirsi ad esso, l'interprete sa che quell'oggetto non può mai essere usato di nuovo e automaticamente recupera la memoria che stava occupando. I programmatori JavaScript a volte devono fare attenzione a garantire che i valori non rimangano inavvertitamente raggiungibili, e quindi non recuperabili, più a lungo del necessario.

JavaScript supporta uno stile di programmazione orientato agli oggetti. In modo generico, questo significa che piuttosto che avere funzioni definite globalmente per operare su valori di vari tipi, i tipi stessi definiscono metodi per lavorare con i valori. Per ordinare gli elementi di un array a, per esempio, non si passa a a una funzione sort(). Invece, si invoca il metodo sort() di a:

// La versione orientata agli oggetti di sort(a).
a.sort();

Si studieranno i metodi più avanti. Tecnicamente, sono solo gli oggetti JavaScript che hanno metodi. Ma numeri, stringhe, valori booleani e symbol si comportano come se avessero metodi. In JavaScript, null e undefined sono gli unici valori sui quali non possono essere invocati metodi.

I tipi oggetto di JavaScript sono mutabili e i suoi tipi primitivi sono immutabili. Un valore di un tipo mutabile può cambiare: un programma JavaScript può cambiare i valori delle proprietà degli oggetti e degli elementi degli array. Numeri, booleani, symbol, null, e undefined sono immutabili, cioè non ha nemmeno senso parlare di cambiare il valore di un numero, per esempio. Le stringhe possono essere pensate come array di caratteri, e si potrebbe aspettare che siano mutabili. In JavaScript, tuttavia, le stringhe sono immutabili: è possibile accedere al testo a qualsiasi indice di una stringa, ma JavaScript non fornisce alcun modo per alterare il testo di una stringa esistente. Le differenze tra valori mutabili e immutabili sono esplorate ulteriormente nelle prossime lezioni.

JavaScript converte liberamente i valori da un tipo all'altro. Se un programma si aspetta una stringa, per esempio, e gli si fornisce un numero, convertirà automaticamente il numero in una stringa. E se si usa un valore non-booleano dove è atteso un booleano, JavaScript convertirà di conseguenza. Si analizzeranno le regole di conversione nelle prossime lezioni. Le regole liberali di conversione dei valori di JavaScript influenzano la sua definizione di uguaglianza, e l'operatore di uguaglianza == esegue conversioni di tipo. In pratica, tuttavia, l'operatore di uguaglianza == è deprecato in favore dell'operatore di uguaglianza stretta ===, che non esegue conversioni di tipo.

Le costanti e le variabili permettono di usare nomi per riferirsi ai valori nei programmi. Le costanti sono dichiarate con const e le variabili sono dichiarate con let (o con var nel codice JavaScript più vecchio). Le costanti e variabili JavaScript sono non tipizzate: le dichiarazioni non specificano che tipo di valori saranno assegnati.

Si studieranno in dettaglio tutte queste caratteristiche dei tipi JavaScript nelle prossime lezioni. Per ora, ecco un breve riassunto dei tipi JavaScript:

Tipo Descrizione
number Un numero, che può essere un intero o un numero in virgola mobile.
string Una stringa di testo, che può essere vuota o contenere caratteri.
boolean Un valore di verità, che può essere true o false.
null Un valore speciale che rappresenta l'assenza intenzionale di un valore.
undefined Un valore speciale che indica che una variabile non è stata inizializzata.
symbol Un valore unico e immutabile, usato per identificatori unici.
object Un tipo complesso che può contenere proprietà e metodi.
array Un tipo speciale di oggetto che rappresenta una collezione ordinata di valori.
set Un oggetto che rappresenta un insieme di valori unici.
map Un oggetto che rappresenta una mappa da chiavi a valori.
regexp Un oggetto che rappresenta un'espressione regolare per la corrispondenza di pattern testuali.
date Un oggetto che rappresenta una data e un orario.
error Un oggetto che rappresenta un errore che può verificarsi durante l'esecuzione del codice.
Tabella 1: I tipi supportati da JavaScript