Przejd藕 do g艂贸wnej zawarto艣ci

Po pierwsze isNaN() i Number.isNaN() nie s膮 ze sob膮 zgodne 馃く.

Teoretycznie za艂o偶eniem isNaN() jest sprawdzenie czy warto艣膰 przekazana w argumencie nie jest warto艣ci膮 liczbow膮.

W praktyce isNaN() sprawdza jednak czy warto艣膰 z argumentu jest ekwiwalentna warto艣ci NaN po konwersji do warto艣ci liczbowej.

Co wi臋cej, dokumentacja Mozilli zach臋ca do korzystania z Number.isNaN() jako bardziej niezawodnego odpowiednika.

Tak, isNan() i Number.isNaN() potrafi膮 zwraca膰 r贸偶n膮 warto艣膰 dla tego samego argumentu wej艣ciowego.

Mimo deklarowanej wi臋kszej niezawodno艣ci, Number.isNaN() wci膮偶 jest bardzo nieintuicyjn膮 metod膮 w celu sprawdzania, czy warto艣膰 wej艣ciowa nie jest warto艣ci膮 liczbow膮.

Dla uzyskania niezawodno艣ci i intuicyjno艣ci najlepiej skorzysta膰 z por贸wnania typeof x === "number".

Mamy wtedy pewno艣膰, 偶e dostaniemy true tylko wtedy, gdy x b臋dzie typu liczbowego.

Pu艂apk膮 mo偶e okaza膰 si臋 wtedy typeof NaN === "number", kt贸ry zwr贸ci true, poniewa偶 typ warto艣ci NaN to... number.

Najwi臋ksze (moim zdaniem) pu艂apki w kwesti isNaN() i Number.isNaN() (gdy s膮 ze sob膮 zgodne), to:

  • Sprawdzanie ci膮gu znak贸w, kt贸ry zawiera liczb臋 np. "123"
  • Pustej tablicy []
  • Warto艣ci logicznych true/false
  • null

Wszystkie z powy偶szych warto艣ci ulegaj膮 konwersji do warto艣ci liczbowych.

Ci膮g znak贸w "123" zostaje skonwertowany do warto艣ci liczbowej 123 wi臋c isNaN("123"), tak samo jak Number.isNaN("123"), zwraca false.

Pusta tablica r贸wnie偶 jest konwertowana do warto艣ci liczbowej, 0.

Warto艣ci logiczne true/false s膮 konwertowane do 1/0.

null r贸wnie偶 ulega konwersji do warto艣ci 0.

Z tego wzgl臋du, powy偶sze warto艣ci po konwersji do warto艣ci liczbowej nie staj膮 si臋 warto艣ci膮 NaN, wi臋c isNaN() dla nich zwraca false.