isNaN ('Hello World!') vs isNaN ('') [duplicate]
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
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)
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
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.