Valori primitivi e riferimenti ECMAScript

In ECMAScript, le variabili possono avere due tipi di valori, ossia valori primitivi e valori di riferimento.

Valori primitivi e valori di riferimento

In ECMAScript, le variabili possono avere due tipi di valori, ossia valori primitivi e valori di riferimento.

Valori primitivi
Segmenti di dati semplici archiviati nello stack (stack), ossia, i loro valori sono archiviati direttamente nella posizione di accesso delle variabili.
Valori di riferimento
Oggetti archiviati nello stack (heap), ossia, il valore archiviato nella variabile è un puntatore (point) che punta all'indirizzo di archiviazione dell'oggetto.

Quando si assegna un valore a una variabile, l'interprete di ECMAScript deve determinare se il valore è di tipo primitivo o di tipo riferimento. Per fare questo, l'interprete deve cercare di determinarese il valore è uno dei tipi primitivi di ECMAScriptcioè Undefined, Null, Boolean, Number e String. Poiché questi tipi primitivi occupano uno spazio fisso, possono essere archiviati in una regione di memoria più piccola - lo stack. Questo tipo di archiviazione facilita la ricerca rapida dei valori delle variabili.

In molti linguaggi, le stringhe sono considerate tipi di riferimento, non tipi primitivi, poiché la lunghezza delle stringhe è variabile. ECMAScript ha rotto questa tradizione.

Se un valore è di tipo riferimento, lo spazio di archiviazione sarà allocato dallo stack. Poiché la dimensione dei valori di riferimento può variare, non può essere messo nello stack, altrimenti ridurrebbe la velocità di ricerca delle variabili. Al contrario, il valore archiviato nello stack è l'indirizzo di archiviazione dell'oggetto nel heap. La dimensione dell'indirizzo è fissa, quindi archiviarlo nello stack non ha alcun impatto negativo sulle prestazioni delle variabili. Come mostrato nell'immagine seguente:

Valori originali e riferimenti memorizzati nello stack e nel heap

Tipi primitivi

Come menzionato in precedenza, ECMAScript ha 5 tipi primitivi (primitive type), ossia Undefined, Null, Boolean, Number e String. ECMA-262 definisce il termineTipo (type)Definito come un insieme di valori, ogni tipo primitivo definisce l'intervallo di valori che contiene e la rappresentazione letterale.

ECMAScript fornisce l'operatore typeof per determinare se un valore si trova all'interno di un certo intervallo di tipo. Puoi usare questo operatore per determinare se un valore rappresenta un tipo primitivo: se è un tipo primitivo, puoi anche determinare quale tipo primitivo rappresenta.

In capitoli successivi, vi spiegheremo in dettaglio i tipi primitivi e i tipi di riferimento di ECMAScript.