Differenza tra isNaN e Number.isNaN
Quasi tutti sanno cos’è `isNaN` e come usarlo. Significa “quella cosa che sembra un numero, davvero un numero o no?” Restituisce vero se è “Non un numero”. Presumo che tu abbia capito il punto. Ok, ora ecco l’affare; qual è la differenza tra isNaN e Number.isNaN?
Prima di iniziare a spiegare voglio ringraziare il mio amico Rafael per avermi incoraggiato a scrivere.
Cominciamo con isNaN. Questa è una funzione globale che puoi chiamare ovunque. Vediamolo in azione:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
È così semplice ma ci sono alcune indicazioni sbagliate. Ecco gli esempi:
Come puoi vedere, secondo l’implementazione di isNaN tratta il valore della stringa come numero e restituisce il risultato in base a questo .. Controlla `isNaN (‘blabla’)`
Quindi, per risolvere questi malintesi abbiamo Il metodo statico Number.isNaN viene fornito con EcmaScript 2015 # Number.isNaN
Cosa sta facendo?
Nel mio caso ho un metodo che accetta due parametri come tipo di numero e faccio qualche animazione sul ridimensionamento del target oggetto. In qualche modo, dopo aver fatto un piccolo refactoring, ho avuto un comportamento strano. Sì, avrei dovuto scrivere test unitari, vergogna. Ad ogni modo, per alcuni casi il metodo riceve undefined come parametri. Quindi devo controllarli.
Ho scritto questo:
La mia disattenzione mi porta a una logica sbagliata. Perché Number.isNaN (undefined) mi restituirà false. (il vecchio isNaN (undefined) restituisce true) Quindi ho cambiato in questo modo:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Quindi sembra che funzioni. Ma volevo prendermi cura di ogni possibile fallimento. Forse potrei ricevere null invece di undefined. Se ricevo null la mia logica fallirà. Perché?
null * null; // 0
null * 8 // 0
Penso che tu veda la cosa. Quindi ho aggiornato il codice in questo modo:
Il mio obiettivo era verificare che due valori fossero indefiniti o nulli. E il mio viaggio finisce per scrivere quell’articolo e aggiornare le mie conoscenze. L’implementazione non è di fantasia, lo so, ma il viaggio è stato educativo.