2012-06-07 24 views
5

Questo dice false, cioè il "" è un numero:Cosa significa "" in JavaScript?

alert(isNaN("")); 

Questo dice NaN, cioè il "" non è un numero e non possono essere convertiti:

alert(parseFloat("")); 

mi aspettavo il secondo codice per convertire "" a 0 dal "" è un numero quando testato in IsNaN ma ho sbagliato! Sto diventando pazzo o mi sono perso qualcosa?

+6

'" "' è una stringa. –

+0

Hmm è interessante. "" Tuttavia sarà solo una stringa vuota. Fondamentalmente hai appena provato che isNaaN non usa lo stesso codice che parseFloat fa –

+0

@isbadawi Grazie, ho modificato la mia domanda in modo da capire cosa voglio veramente raggiungere. – dpp

risposta

3

parseFloat tenta di analizzare un numero da stringa in cui come isNaNconverts the argument to number prima di controllare che:

Number("") //0 http://ecma-international.org/ecma-262/5.1/#sec-9.3.1 
parseFloat("") //NaN http://ecma-international.org/ecma-262/5.1/#sec-15.1.2.3 

A quanto pare questo è "rotto" o "confusione", quindi dalle specifiche:

A modo affidabile per il codice ECMAScript per verificare se un valore X è un NaN è un'espressione del modulo X! == X. Il risultato sarà true se e solo se X è un NaN.

0 !== 0 // false 
NaN !== NaN //true 

function isExactlyNaN(x) { 
    return x !== x; 
} 
+0

Side-note per confermare il comportamento: 'isNaN (" NaN ")' restituisce 'true'. – leppie

+2

@leppie Così fa 'isNaN (" pepperoni ")' :) – Paulpro

+0

@ PaulP.R.O .: Sicuramente IEEE 794; p – leppie

1

isNaN converte in tipo Numero e verifica se il valore è il numero speciale NaN.

La stringa vuota convertito in un numero è 0 (+"" === 0), e dal momento che non è 0NaN vedete false.

parseFloat tuttavia è più complicato di una semplice conversione al tipo di numero e restituisce NaN per la stringa vuota (parseFloat("") === NaN).

0

JavaScript interpreta stringa vuota come 0 che fallisce test isNaN. Per quanto riguarda parseFloat cerca di analizzare il numero nella stringa vuota che fallisce e restituisce NaN ..

+0

È JavaScript che lo interpreta come 0 o la funzione isNaN? Coz se è JavaScript, allora perché parseFloat non considera "" come 0? – dpp

1

Non essendo lo NaN non è come essere un numero. Significa solo che non sei il valore molto speciale NaN.

O qualsiasi cosa convertibile in NaN dalle regole di conversione arcano del linguaggio JS.

+0

Cosa significa "NaN" di nuovo? Not-a-Number vero? Rimuovere il "Not-a" lo rende un numero: D almeno nella mia percezione. – dpp

+1

@dpp 'NaN' è anche un numero:' typeof NaN === "number" ' – Paulpro

+0

' NaN' è un valore numerico speciale. Forse sarebbe meglio pensarlo come "il 'numero' che rappresenta il risultato di operazioni come 0/0 o Infinito/Infinito" – Domenic

0

Per comprendere il comportamento di questo è importante capire la semantica.

isNaN controlla se il valore non può essere costretto al numero, se chiamandolo sul valore restituisce false, allora vuol dire che Number(value) tornerà numero valido.

parseFloatanalizza numero da una stringa, se la stringa non inizia con un numero qualsiasi, allora ritorna NaN, come è stato trovato nessun numero da analizzare.

I programmatori tendono a sovrautilizzare parseInt e parseFloat per coercizione, quando nella maggior parte dei casi devono utilizzare Number, che è più severo e non è così confuso.