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, ad esempio Infinity e NaN, un valore che significa "non è un numero" il potenziale risultato del tentativo di eseguire su valori non numerici.

L'oggetto numerico

Quando un valore viene passato alla funzione Number(), tale valore viene convertito in il numero equivalente. Ad esempio, una stringa numerica restituisce un equivalente primitiva numerica:

Number( "10" );
> 10

Il passaggio 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 spiegato in dettaglio nell'ereditarietà prototipale, probabilmente avrai poca o nessuna ragione per usare l'oggetto Number come 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, non supera confronti rigidi di uguaglianza con valori letterali di numeri 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: Precisione doppia IEEE 754-1985 a 64 bit. numeri in virgola mobile tra -2^1024 e 2^1024. Prima che JavaScript archivi qualsiasi numero in memoria, converte quel numero in un numero binario in virgola mobile, chiamato anche numero in virgola mobile.

Questa memoria a 64 bit (un bit "di segno" positivo o negativo, 11 bit per esponente e 52 bit per una frazione) possono causare errori di precisione con qualsiasi numero di cifre che non rientrano 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 memorizzato come numero intero, ovvero un numero in virgola mobile senza una frazione compresa tra -(2^53 − 1) e 2^53 − 1. Poiché i dati mobili vengono memorizzati nello stesso modo fondamentale, non c'è alcuna differenza pratica nel funzionamento di questi numeri. Tuttavia, consigliamo di utilizzare i numeri interi ogni volta possibile per evitare errori di precisione.

Operatori dei numeri

Quando utilizzi operatori matematici standard con le primitive numeriche, la classe ordine delle operazioni matematico si applica: tutte le espressioni racchiuse tra parentesi vengono valutate per prime, seguite 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'aumento del primo
operando alla potenza del secondo operando.
2**4 16
% Resto Restituisce il resto rimanente quando
il primo operando viene diviso per il secondo operando.
12%5 2

Puoi anche utilizzare operatori di assegnazione matematico per eseguire sul valore di una variabile e assegnarla immediatamente calcolato di nuovo 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 "non un numero" (NaN) e un valore che rappresenta l'infinito che può essere positivo (Infinity) o negativo (-Infinity).

È raro che Infinity riscontrerai se è successo dopo la divisione per zero, 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") si presenta con maggiore frequenza nei casi in cui il risultato di un'operazione aritmetica non può essere espresso come numero. Ad esempio, perché JavaScript cerca di dedurre tipo di dati da valore e contesto, un valore letterale stringa contenente solo un numero può essere utilizzato in un'operazione matematica:

"2" * 2;
> 4

Tuttavia, se la stringa non può essere analizzata come valore numerico, il calcolo l'operazione genera un valore diverso da un numero:

"two" * 2;
> NaN

NaN viene restituito ogni volta che un valore non valido è rappresentato da 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 e Math.sqrt( -10 ))
  • Un'operazione aritmetica con un risultato indeterminato (0 * Infinity)
  • Un'operazione aritmetica che include un'istruzione NaN esplicita (NaN + 2) o un risultato NaN (2 * "string" / 2)

Verifica le tue conoscenze

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

NaN
1
0
Falso

Qual è il risultato della seguente operazione matematica?

"Six" * 3

NaN
18
Vero
0
2