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
.