Numeri

Un valore numerico è composto da qualsiasi serie di caratteri numerici, ad esempio:

5

Il tipo di dati numerici include anche alcune proprietà globali speciali che rappresentano concetti numerici, come Infinity e NaN, un valore che significa "non un numero", una potenziale conseguenza del tentativo di eseguire calcoli matematici su valori non numerici.

L'oggetto numerico

Quando un valore viene passato alla funzione Number(), questo valore viene convertito nel numero equivalente. Ad esempio, una stringa numerica genera un numero primitivo equivalente:

Number( "10" );
> 10

La trasmissione di un valore false o null a Number() restituisce 0, mentre true restituisce 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Se non è possibile convertire un valore, come nel caso di undefined o di una stringa contenente caratteri non numerici, la funzione Number restituisce NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Come descritto in dettaglio nell'ereditarietà prototipale, probabilmente avrai pochi o nessun motivo per utilizzare l'oggetto Number come costruttore, poiché crea un oggetto Number anziché un valore letterale numerico.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Questo oggetto si comporta come il valore assegnato per le operazioni matematiche, ma non supera rigorosi confronti di uguaglianza con i valori letterali numerici perché i tipi di dati non corrispondono, senza fornire alcun vantaggio pratico rispetto a un valore letterale.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Numeri in virgola mobile e numeri interi

JavaScript ha un solo tipo di numero: numeri in virgola mobile IEEE 754-1985 a doppia precisione a 64 bit compresi tra -2^1024 e 2^1024. Prima di archiviare un numero in memoria, JavaScript lo converte in un numero binario in virgola mobile, chiamato anche float.

Questa archiviazione a 64 bit (un bit "di segno" positivo o negativo, 11 bit per un esponente e 52 bit per una frazione) può causare errori di precisione con un numero qualsiasi di cifre che non rientra in un intervallo consentito. Questa limitazione è intrinseca al tipo di dati numerici di JavaScript.

0.1 + 0.7
> 0.7999999999999999

Un valore numerico può essere invece archiviato come numero intero, ovvero un numero in virgola mobile senza frazione compresa tra -(2^53 − 1) e 2^53 − 1. Poiché i numeri in virgola mobile e i numeri interi vengono archiviati nello stesso modo fondamentale, non esiste alcuna differenza pratica nel funzionamento di questi numeri. Tuttavia, ti consigliamo di usare, se possibile, numeri interi per evitare errori di precisione.

Operatori dei numeri

Quando utilizzi operatori matematici standard con primitive di numeri, si applica l'ordine delle operazioni matematico: tutte le espressioni racchiuse tra parentesi vengono valutate per prime, seguite da esponenti, moltiplicazioni, divisione, addizione e sottrazione.

Operatore Nome Descrizione Utilizzo Risultato
+ Aggiunta 2+2 4
- Sottrazione 4-2 2
* Moltiplicazione 2*5 10
/ Divisione 10/5 2
++ Incremento Aggiunge uno a un numero 2++ 3
-- Diminuisci Sottrae uno da un numero 3-- 2
** Esponente Restituisce il risultato dell'elevazione del primo operando
alla potenza del secondo operando.
2**4 16
% Resto Restituisce il resto rimasto quando il primo operando
viene diviso per il secondo operando.
12%5 2

Puoi anche utilizzare gli operatori di assegnazione matematica per eseguire un'operazione matematica sul valore di una variabile e assegnare immediatamente il valore appena calcolato alla variabile.

Operatore Nome Utilizzo
+= Assegnazione addizione myValue += 2
-= Assegnazione della sottrazione myValue -= 2
*= Assegnazione di moltiplicazione myValue *= 2
/= Assegnazione divisione myValue /= 2
**= Assegnazione esponente myValue **= 2
%= Assegnazione restante myValue %= 2

Valori simbolici

La primitiva numerica si applica anche ad alcuni casi speciali: il valore "non è un numero" (NaN) e un valore che rappresenta l'infinito che può essere positivo (Infinity) o negativo (-Infinity).

Raramente potresti riscontrare Infinity come risultato della divisione per zero, un caso in cui la maggior parte dei linguaggi di programmazione genera un errore:

10 / 0
> Infinity

Ricorda che JavaScript è sensibile alle maiuscole. Infinity è un tipo di dati numerico che rappresenta il concetto di infinito, ma infinity non ha un significato speciale:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (che significa "Non è un numero") viene visualizzato con maggiore frequenza nei casi in cui il risultato di un'operazione aritmetica non possa essere espresso come numero. Ad esempio, poiché JavaScript cerca di dedurre il tipo di dati dal valore e dal contesto, in un'operazione matematica può essere utilizzato un valore letterale stringa contenente solo un numero:

"2" * 2;
> 4

Tuttavia, se la stringa non può essere analizzata come valore numerico, l'operazione matematica risulterà non un numero:

"two" * 2;
> NaN

NaN viene restituito ogni volta che un valore non valido è rappresentato come un numero in un'operazione matematica. Ecco alcuni esempi:

  • Numero di conversioni non riuscite (ad esempio, parseInt( undefined ))
  • Operazioni aritmetiche in cui il risultato non è un numero reale (ad esempio, 0 / 0, Math.sqrt( -10 ))
  • Un'operazione aritmetica con un risultato indeterminato (0 * Infinity)
  • Un'operazione aritmetica che include un risultato NaN esplicito (NaN + 2) o NaN (2 * "string" / 2)

Verifica le tue conoscenze

Qual è il risultato del superamento di false a Number()?

0
Falso
NaN
1

Qual è il risultato della seguente operazione matematica?

"Six" * 3

NaN
2
18
Vero
0