Potresti usare spesso una libreria di utilità Javascript per la tua applicazione. Sia per accelerare il vostro processo di sviluppo o semplicemente volete qualche funzione di utilità che sia stata testata e che abbia dimostrato di funzionare. Alcune popolari librerie di utilità che conosciamo sono lodash e underscore.

Hai mai usato la libreria di utilità per validare se una variabile è un numero valido? Valido significa che il valore non causerà un errore o non restituirà un risultato inaspettato, come NaN. Se avete una dipendenza da lodash o underscore, potreste essere tentati di usare quella funzione isNumber. Sembra fare proprio questo, giusto?

Guardiamo entrambe le implementazioni lodash e underscore per la funzione isNumber.

https://github.com/jashkenas/underscore/blob/e51aa7251f3e010fe003fbb9d969a74b9dcda103/underscore.js#L1325-L1330
https://github.com/lodash/lodash/blob/04ebca6c86deba0ff733847f6c11fd5265e1ce03/isNumber.js#L29-L32

Entrambe le librerie popolari hanno un’implementazione simile. Confronteranno il tipo di nome della classe Javascript variabile con la stringa . Questo vale non solo per il tipo Numero ma anche per altri tipi come Data, funzione, ecc.

Potreste pensare che va bene, ma sapete che NaN è anche un Numero in Javascript? NaN in javascript è un Numero che rappresenta il valore: Not-A-Number. Un po’ confuso, vero? Potete verificarlo voi stessi nella console javascript.

toString.call(NaN)
// ->

Quindi, usare il metodo isNumber non è proprio il modo corretto per il caso d’uso di cui sopra. Abbiamo bisogno di un’altra validazione, cioè controllare se il numero non è NaN . Ci ritroveremo con qualcosa del genere.

const isValidNumber = _.isNumber(obj) && !isNaN(obj)

Come la mettiamo con la funzione isDate? Cosa può potenzialmente causare un problema?

Provare a inizializzare un oggetto Date non valido, come new Date("31/1/2019") o new Date("test123") . Il valore risultante sarà ancora un oggetto Date ma sarà un oggetto Date non valido. Questo probabilmente causerà un errore nella vostra logica relativa alla data. Pertanto dovremmo aggiungere un altro passo per la convalida dell’oggetto Date, forse questo è sufficiente:

const isValidDate = _.isDate(obj) && !isNaN(obj.getTime()) 

Ricetta:

Lascia un commento

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