Diferența dintre isNaN și Number.isNaN
Aproape toată lumea știe ce este `isNaN` și cum să-l folosească. Înseamnă „este acel lucru care arată ca un număr, într-adevăr un număr sau nu?” Revine adevărat dacă este dat „Nu este un număr”. Presupun că ai înțeles. Ok, acum iată afacerea; care este diferența dintre isNaN și Number.isNaN?
Înainte de a începe să explic, vreau să îi mulțumesc prietenului meu Rafael pentru că m-a încurajat să scriu.
Să începem cu isNaN. Aceasta este o funcție globală pe care o puteți apela de oriunde. Să o vedem în acțiune:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
Este atât de simplu, dar există unele direcții greșite. Iată exemplele:
După cum puteți vedea în conformitate cu implementarea isNaN, tratează valoarea șirului ca număr și returnează rezultatul pe baza acestui lucru .. Verificați `isNaN (‘blabla’)`
Deci, pentru a rezolva acele concepții greșite, avem Metoda statică Number.isNaN vine cu EcmaScript 2015 # Number.isNaN
Ce face?
În cazul meu, am o metodă care acceptă doi parametri ca tip de număr și fac unele animații la scalarea țintei obiect. Cumva, după ce am refăcut puțin, am avut un comportament ciudat. Da, ar fi trebuit să scriu teste unitare, rușine pentru mine. Oricum, pentru unele cazuri, metoda primește parametri nedefiniți. Așadar, trebuie să le verific.
Am scris acest lucru:
Neatenția mea mă duce la o logică greșită. Deoarece Number.isNaN (nedefinit) îmi va da fals. (vechiul isNaN (nedefinit) revine adevărat) Așa că m-am schimbat astfel:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Deci, pare să funcționeze. Dar am vrut să-mi pese de orice eșec posibil. Poate că aș primi nul în loc de nedefinit. Dacă primesc nul logica mea va eșua. De ce?
null * null; // 0
null * 8 // 0
Cred că vedeți chestia. Așa că am actualizat codul astfel:
Obiectivul meu a fost verificarea a două valori pentru a fi nedefinite sau nule. Și călătoria mea ajunge să scriu articolul respectiv și să-mi actualizez cunoștințele. Implementarea nu este fantezistă, dar călătoria a fost educativă.