isNaN ('Hello World!') vs isNaN ('') [duplicate]

Sep 09 2020

Vorrei sapere perché il seguente programma si comporta in modo diverso sebbene il tipo di dati sia una stringa,

console.log(isNaN('Hello World!'))

console.log(isNaN(''))

La console mostra il seguente risultato,

true

false

Mi aspettavo che entrambi i risultati fossero veri.

Qualcuno mi aiuta a capire questa cosa fondamentale.

Grazie.

Risposte

4 PavelBotsman Sep 09 2020 at 13:21

Secondo la documentazione :

Fin dalle primissime versioni della specifica della funzione isNaN, il suo comportamento per gli argomenti non numerici è stato fonte di confusione. Quando l'argomento della funzione isNaN non è di tipo Number, il valore viene prima convertito in un numero. Il valore risultante viene quindi testato per determinare se è NaN. Pertanto, per i non numeri che quando costretti al tipo numerico risultano in un valore numerico non NaN valido (in particolare la stringa vuota e le primitive booleane, che quando forzate danno valori numerici zero o uno), il valore restituito "falso" può essere inaspettato; la stringa vuota, ad esempio, è sicuramente "non un numero". La confusione deriva dal fatto che il termine "non un numero" ha un significato specifico per i numeri rappresentati come valori in virgola mobile IEEE-754. La funzione deve essere interpretata come una risposta alla domanda: "questo valore, se costretto a un valore numerico, è un valore IEEE-754" Not A Number "?

Potresti voler usare Number.isNaNinvece di isNan, si comporta in modo diverso (questo è anche menzionato nel link che ho fornito)

3 sidverma Sep 09 2020 at 13:24

console.log(isNaN('')); 
// false: the empty string is converted to 0 which is not NaN

console.log(isNaN(' ')); 
// false: a string with spaces is converted to 0 which is not NaN

Per maggiori dettagli, fare riferimento alla documentazione ufficiale: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

1 Taoufik Sep 09 2020 at 13:36

Come indicato in questo

Questa funzione (isNanN ()) restituisce true se il valore è uguale a NaN. Altrimenti ritorna

La funzione globale isNaN () converte il valore testato in un numero, quindi lo verifica.

Quando converti i valori dati in numero, ottieni questo

Number("") = 0 
Number("Hello World!") = NaN

Questo spiega i risultati ottenuti.