Come verificare la presenza di NaN in JavaScript

Verificare la presenza di NaN (“non un numero”) è semplice come verificare l’uguaglianza di sé in JavaScript.

Dr. Derek Austin 🥳

Segui

15 set 2019 · 4 minuti di lettura

Foto di Rattap su Unsplash

In JavaScript, il valore speciale NaN (che significa” non un numero “) viene utilizzato per rappresentare il risultato di un calcolo matematico che non può essere rappresentato come un numero significativo. – Joshua Clanton su A Drip of JavaScript

Il valore speciale NaN viene visualizzato in JavaScript quando Math le funzioni falliscono (Math.sqrt(-37)) o quando una funzione che tenta di analizzare un numero fallisce (parseInt("No integers here")).

NaN quindi avvelena tutte le altre funzioni matematiche, portando a tutte le altre operazioni matematiche risultanti in NaN.

Foto di Chris Barbalis su Unsplash

Nota che in JavaScript, la divisione per 0 restituisce Infinity, non NaN:

Questo risultato è dovuto al modo in cui floating-poi nt è definito, più in generale del solo Javascript. Perché? Approssimativamente, perché 1/0 è il limite di 1 / x quando x si avvicina a zero. E 0/0 non ha alcuna interpretazione ragionevole, quindi NaN.

Che cos’è NaN comunque?

NaN è una proprietà dell’oggetto globale. Il valore iniziale di NaN è Not-A-Number, lo stesso del valore di Number.NaN. – Documenti MDN

Foto di Andrew Buchanan su Unsplash

Verificare la presenza di NaN è più difficile di quanto sembri

Sfortunatamente, ci sono due problemi con il tentativo di controllare NaN:

  1. typeof NaN è” number “
  2. NaN è diverso da tutti gli altri valori in JavaScript

Dai un’occhiata a questo esempio di codice:

Allora come controlliamo se abbiamo un valore NaN che avvelenerà la matematica?

Foto di Wolfgang Rottmann su Unsplash

Verifica la presenza di NaN con auto-uguaglianza

” NaN, e solo NaN, sarà diverso da se stesso. ” – Documenti MDN

In JavaScript, il modo migliore per verificare la presenza di NaN è verificare l’autoeguaglianza utilizzando uno degli operatori di uguaglianza incorporati, == o ===.

Perché NaN non è uguale a se stesso, NaN != NaN restituirà sempre true.

Ovviamente, tale NaN test nel codice non è sempre leggibile, quindi è una buona idea usare un commento o creare una funzione wrapper:

Non fa differenza se utilizzi != o !== per verificare NaN.

Foto di Erik Mclean su Unsplash

Verifica la presenza di NaN con Object.is ()

” Il Object.is() determina se due valori hanno lo stesso valore.”- Documenti MDN

A differenza degli operatori di uguaglianza rigorosa e libera, il metodo di supporto ES6 Object.is() non considera NaN uguale a se stesso:

Quindi, se sostituisci === con Object.is(), non devi mai preoccuparti sul controllo di NaN qualsiasi modo speciale. Problema risolto!

Ho scritto su come utilizzare Object.is() in JavaScript in un altro articolo:

Una nota sulla terminologia – Object.is() è una funzione della classe Object globale, non la chiamo “operatore di uguaglianza” come == o ===.

Ad esempio, nei test Jest, il metodo .toBe() che utilizza === è diverso dal metodo .toEqual() che utilizza Object.is().

Per concludere qui, dovrei menzionare che un JavaScript ES6 Set, utilizzato per trovare valori univoci, conserverà solo una copia di un NaN valore.

Foto di Tony Hand su Unsplash

Una parola sul numero .isNan ()

JavaScript moderno ha già un’implementazione da controllare per NaN chiamata Number.isNan() che funziona come pensi sarebbe. Ad esempio:

Tieni presente che Number.isNan() è diverso dalla funzione isNan(), che è un’implementazione precedente il cui scopo effettivo è verificare se un valore non può essere costretto a un numero.

Ecco la differenza, per completezza:

  • isNaN() restituirà true se il valore è attualmente NaN o se sarà NaN dopo che è stato convertito in un numero. In altre parole, se riceve un valore che può essere convertito in un numero, isNaN () restituirà false.
  • Number.isNaN() restituirà true solo se il valore è attualmente NaN.

Quindi, se supporti i vecchi browser (specialmente Internet Explorer) che non supportano Number.isNan(), allora è meglio controllare l’auto-uguaglianza.

Foto di Nick Hillier su Unsplash

Leave a Reply

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *