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
) oNaN
(2 * "string" / 2
)
Verifica le tue conoscenze
Qual è il risultato del superamento di false
a Number()
?
Qual è il risultato della seguente operazione matematica?
"Six" * 3