2013-07-23 16 views
5

Perché i linguaggi di programmazione hanno un valore NaN?Perché abbiamo bisogno del valore NaN quando possiamo lanciare TypeErrors?

Math.floor('string'); //--> NaN 

Perché non basta lanciare un errore TypeError?

TypeError: Expected number instead of string 

La questione è aggiunto sia e perché JavaScript è il linguaggio sono principalmente familiarità con, ma so che questo vale per altre lingue.

+0

Perché le eccezioni sono un dolore al collo :) – Pointy

+0

@Pointy Catturarle non sembra essere così difficile. –

+1

Introducono una sorta di non-linearità nel codice. Non è così tanto che è * difficile *, è solo distratto e disordinato. – Pointy

risposta

4

Nelle lingue digitate, è necessario inserire un numero in una variabile numerica, anche quando non si dispone di un numero. Hai inserito NaN (ecco perché typeof NaN è "number" in JavaScript). È proprio come null per i riferimenti a oggetti quando non hai di meglio.

E le eccezioni, che interrompono il flusso di istruzioni, in realtà non sono così popolari per tutti. Alcuni potrebbero obiettare che dovrebbero essere usati per casi eccezionali, non il semplice fatto che una stringa non è analizzabile come un numero.

Nota che NaN può anche essere il risultato di un'operazione matematica, che si verifica quando non è possibile decidere quale dovrebbe essere il risultato (ad esempio 0 * Infinity). È più semplice gestirlo con NaN piuttosto che includere la ramificazione in tutte le operazioni.

+0

Grazie! Si fa un'analogia interessante 'NaN: numero :: null: oggetto' –

+1

@Web_Designer Si noti che' typeof null' è '" oggetto "' :) –

3

JavasScript è una lingua debolmente tipizzata. Il lancio degli errori è costoso. Osserva attraverso jquery o underscore e vedrai che gli errori vengono raramente lanciati, solo per casi "eccezionali". È meno costoso e più facile gestire valori come NaN.

4

Per essere non creativo, è perché NaN s (così come altre quantità non numeriche, come l'infinito) fanno parte dello IEEE 754 floating-point standard, che molti linguaggi di programmazione implementano.

È progettato per consentire la valutazione di "casi speciali" nel calcolo numerico come numeri normali senza interrompere i calcoli. Ciò significa nessuna eccezione. Al contrario, i NaN vengono generalmente propagati attraverso le operazioni finché non escono dall'altra parte, nel bene o nel male.

+1

sì, anche se in questo caso particolare è un * piccolo * discutibile per restituire 'NaN '. – Pointy

Problemi correlati