Il problema con il test per NaN in JavaScript

Originariamente pubblicato nella newsletter A goccia di JavaScript.

In JavaScript, il valore specialeNaN (che significa “non un numero”) viene utilizzato per rappresentare il risultato di un calcolo matematico che non può essere rappresentato come un numero significativo., Per esempio:

Si sono probabilmente eseguito in NaN quando si utilizza parseInt o parseFloat per estrarre un numero da una stringa, come in questo esempio:

Come risultato, gli sviluppatori JavaScript spesso bisogno di testare una variabile di risultato per verificare se contiene NaN o se si tratta di un valore significativo, invece. Esistono diversi modi per verificare se un valore è NaN, ma sfortunatamente la maggior parte di essi non è affidabile., Andiamo a piedi attraverso alcuni di loro e vedere come non riescono.

La cosa logica da fare è verificare se il risultato è uguale a NaN.

Cosa sta succedendo qui? In JavaScript, NaN ha la particolarità di essere l’unico valore che non è uguale a se stesso. Ciò significa che non possiamo scoprire se un valore è NaN controllando l’uguaglianza a NaN perché la risposta sarà sempre no.

Cos’altro potremmo provare? Come circa il costruito in isNaN funzione?,

Impressionante! Questo sembra funzionare. E in effetti funziona in alcune circostanze. Tuttavia, nonostante il nome, lo scopo della funzioneisNaN non è quello di verificare se un valore èNaN. Invece, lo scopo è quello di verificare se un valore non può essere costretto a un numero. Per questo motivo, potrebbe restituire falsi positivi., Considera quanto segue:

A meno che tu non sia certo che avrai a che fare solo con i numeri oNaN, la funzioneisNaN non è abbastanza adatta a questo scopo.

Tuttavia, si scopre che ECMAScript 6 crea una nuova funzione per lo scopo specifico di verificare se un valore èNaN. Confusamente, questa funzione è anche chiamata isNaN, sebbene sia collegata all’oggetto Number piuttosto che direttamente all’oggetto globale., Può essere usato in questo modo:

Eccellente! Abbiamo un metodo che funziona davvero. Purtroppo, Number.isNaN è disponibile solo nelle versioni più recenti di FireFox e Chrome, e non è ancora supportato in IE o altri browser principali. Questo potrebbe essere un approccio praticabile in futuro, ma per ora può essere utilizzato solo in circostanze molto ristrette.

Forse possiamo controllare NaN ” s type invece?

Sì, lo stai leggendo correttamente., In JavaScript, il valoreNaN è di tiponumber. Questo non sarà molto utile.

Quindi cosa possiamo fare per ottenere qualcosa che funzioni correttamente, ma è anche disponibile cross-browser? Ricorda come ho detto che NaN è l’unico valore in JavaScript che non è uguale a se stesso? Possiamo approfittare di questo fatto.

Attualmente il modo migliore per verificare se un valore èNaN è verificare se non è uguale a se stesso. Se è così, allora sai che èNaN.,

Ovviamente, l’utilizzo di questa tecnica non è particolarmente leggibile, quindi è comune avvolgerlo in un metodo di utilità che comunica l’intento in modo più chiaro. Sia Underscore che Lo-Dash forniscono implementazioni.

Spero che questo ti abbia aiutato a capire meglio le stranezze diNaN.

Grazie per la lettura!per saperne di più clicca qui

Lascia un commento

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