Verschil tussen isNaN en Number.isNaN
Bijna iedereen weet wat `isNaN` is en hoe het te gebruiken. Het betekent “is dat ding dat eruitziet als een nummer, echt een nummer of niet?” Het retourneert waar als gegeven “Geen getal” is. Ik neem aan dat je het begrijpt. Ok, nu is hier de deal; wat is het verschil tussen isNaN en Number.isNaN?
Voordat ik begin met uitleggen, wil ik mijn vriend Rafael bedanken voor het aanmoedigen van mij om te schrijven.
Laten we beginnen met isNaN. Dit is een algemene functie die u overal vandaan kunt oproepen. Laten we het eens in actie zien:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
Het is zo simpel, maar er zijn enkele misleidingen. Hier zijn de voorbeelden:
Zoals je kunt zien volgens isNaN-implementatie behandelt stringwaarde als getal en retourneert het resultaat op basis hiervan .. Controleer `isNaN (‘blabla’)`
Dus om deze misvattingen op te lossen hebben we Number.isNaN statische methode wordt geleverd met EcmaScript 2015 # Number.isNaN
Wat doet het?
In mijn geval heb ik een methode die twee parameters accepteert als nummertype en wat animatie maakt over het schalen van het doel voorwerp. Op de een of andere manier kreeg ik na een beetje refactoring raar gedrag. Ja, ik had unit-tests moeten schrijven, schaam me. Hoe dan ook, in sommige gevallen ontvangt de methode ongedefinieerde parameters als parameters. Dus ik moet ze controleren.
Ik schreef dit:
Mijn onzorgvuldigheid leidt me tot een verkeerde logica. Omdat Number.isNaN (ongedefinieerd) mij false retourneert. (old isNaN (undefined) geeft true terug) Dus ik veranderde als volgt:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Dus het lijkt te werken. Maar ik wilde me zorgen maken over elke mogelijke mislukking. Misschien ontvang ik misschien null in plaats van ongedefinieerd. Als ik null ontvang, zal mijn logica mislukken. Waarom?
null * null; // 0
null * 8 // 0
Ik denk dat je het ziet. Dus ik heb de code als volgt bijgewerkt:
Mijn doel was om te controleren of twee waarden ongedefinieerd of null waren. En mijn reis eindigt met het schrijven van dat artikel en het bijwerken van mijn kennis. De implementatie is niet luxueus, ik weet het, maar de reis was leerzaam.