Próbowałem tylko w konsoli JavaScript Firefoksa, ale żadne z poniższych stwierdzeń nie jest prawdziwe:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
javascript
nan
Paul D. Waite
źródło
źródło
Odpowiedzi:
Wypróbuj ten kod:
Aby sprawdzić, czy jakakolwiek wartość to NaN, a nie tylko liczby, zobacz tutaj: Jak testujesz NaN w JavaScript?
źródło
NaN
, to tak. (Nie twierdzę, że zawsze tak robisz)isNaN(parseFloat("geoff")) // true
isNaN(parseFloat("10geo")) // false
Jak to jest przydatne?Właśnie natrafiłem na tę technikę w książce Skuteczne JavaScript, która jest dość prosta:
Ponieważ NaN jest jedyną wartością JavaScript, która jest traktowana jako nierówna w stosunku do siebie, zawsze możesz sprawdzić, czy wartość jest NaN, sprawdzając, czy jest równa:
Nie zdawałem sobie z tego sprawy, dopóki @allsyed nie skomentował, ale jest to w specyfikacji ECMA: https://tc39.github.io/ecma262/#sec-isnan-number
źródło
Użyj tego kodu:
Zobacz
isNaN()
dokumenty w MDN .źródło
var value = 0/0;
ivar value2= String("123 131");
tworzymy wartości NaN, a coś takiegovar value3 = "abcd";
jest również wartością NaN.Jeśli chodzi o wartość typu Number, która ma zostać przetestowana, czy jest to,
NaN
czy nie, funkcja globalnaisNaN
wykona pracęAby uzyskać ogólne podejście, które działa dla wszystkich typów w JS, możemy użyć dowolnego z poniższych:
Dla użytkowników ECMAScript-5:
Dla osób używających ECMAScript-6:
Aby uzyskać spójność w ECMAScript 5 i 6, możemy również użyć tego wypełnienia dla Number.isNan
proszę sprawdzić tę odpowiedź, aby uzyskać więcej informacji.
źródło
isNaN
najpierw przekształca argument na wartość liczbową.NaN to specjalna wartość, której nie można tak przetestować. Interesującą rzeczą, którą chciałem się tylko podzielić, jest to
Zwraca wartość true tylko dla wartości NaN i jest bezpiecznym sposobem testowania. Zdecydowanie powinien być zawinięty w funkcję lub przynajmniej skomentowany, ponieważ oczywiście nie ma sensu testowanie, czy ta sama zmienna nie jest sobie równa, hehe.
źródło
Powinieneś użyć globalnego
isNaN(value)
wywołania funkcji, ponieważ:Przykłady:
Mam nadzieję, że to Ci pomoże.
źródło
isNaN('') //false
aleparseInt('') //NaN
. To samo można powiedzieć onull
.Począwszy od ES6 ,
Object.is(..)
jest nowym narzędziem, które można wykorzystać do testowania dwóch wartości absolutnej równości:źródło
Aby naprawić problem
'1.2geoff'
polegający naNumber()
analizie składni , po prostu użyj parsera.Więc raczej niż to:
Zrób to:
EDYCJA: Właśnie zauważyłem inny problem z tego powodu ... fałszywe wartości (i prawdziwe jak prawdziwy boolean) zostały
Number()
zwrócone jako0
! W takim przypadku ... parseFloat działa za każdym razem. Wróćmy więc do tego:I to obejmuje na pozór wszystko. Testowałem go o 90% wolniej niż lodash,
_.isNaN
ale to nie obejmuje wszystkich NaN:http://jsperf.com/own-isnan-vs-underscore-lodash-isnan
Żeby było jasne, moje zajmuje się dosłowną ludzką interpretacją czegoś, co nie jest „liczbą”, a lodash zajmuje się dosłowną komputerową interpretacją sprawdzania, czy coś jest „NaN”.
źródło
Chociaż odpowiedź @chiborga JEST poprawna, należy zwrócić uwagę na jeszcze więcej:
Chodzi o to, że jeśli używasz tej metody do sprawdzania poprawności danych wejściowych, wynik będzie raczej liberalny.
Tak, więc możesz użyć
parseFloat(string)
(lub w przypadku liczb pełnychparseInt(string, radix)
”, a następnie owinąć jeisNaN()
, ale pamiętaj o gotcha z liczbami splecionymi z dodatkowymi znakami nienumerycznymi.źródło
parseFloat('test1.2')
wróciNaN
.Proste rozwiązanie!
NAPRAWDĘ super proste! Tutaj! Miej tę metodę!
Użyj tak prostego jak:
Przykład:
Istnieje kilka alternatywnych ścieżek, które wybierasz do implementacji, jeśli nie chcesz używać metody o alternatywnej nazwie i chciałbyś upewnić się, że jest ona bardziej dostępna na całym świecie. Ostrzeżenie Te rozwiązania obejmują modyfikowanie obiektów rodzimych i mogą nie być najlepszym rozwiązaniem. Zawsze zachowaj ostrożność i pamiętaj, że inne biblioteki, których możesz użyć, mogą zależeć od kodu natywnego lub podobnych zmian.
Alternatywna implementacja 1: Zastąp
isNaN
metodę rodzimą .Alternatywne wdrożenie 2: Dołącz do obiektu liczbowego
* Sugerowane, ponieważ jest to również wielokrotne wypełnienie dla ECMA od 5 do 6
Test rozwiązania alternatywnego, jeśli jest pusty
Prostą metodę okna napisałem ten test, jeśli obiekt jest Pusty . Jest trochę inny w tym, że nie daje, jeśli przedmiot jest „dokładnie” NaN , ale pomyślałem, że zwymiotuję, ponieważ może to być przydatne, gdy szukam pustych przedmiotów.
Przykład:
Pokaż fragment kodu
Bardzo dokładne sprawdzenie, czy jest puste
Ten ostatni jest nieco głęboki, nawet sprawdzając, czy obiekt jest pełen pustych obiektów. Jestem pewien, że ma miejsce na ulepszenia i możliwe doły, ale jak dotąd wydaje się, że łapie większość wszystkiego.
Pokaż fragment kodu
źródło
isNaN
NIE jest wiarygodne. Zostałem tam skomentowany i powiedziałem, że to pytanie lepiej pasuje do mojej odpowiedzi, przenosząc ją tutaj. Wystarczy tylko wprowadzenie czegoś pomocne / użyteczne tam w odniesieniu do tej kwestii, że pojawi się na wyszukiwarce Google kwestii pod rękąis it NaN?
. Na marginesie, moja odpowiedź byłaby bardziej precyzyjna niż wybrana odpowiedź.Chcę tylko podzielić się inną alternatywą, niekoniecznie jest lepsza niż inne tutaj, ale myślę, że warto spojrzeć na:
Logika tego polega na tym, że każda liczba oprócz
0
iNaN
jest obsadzonatrue
.Zrobiłem szybki test, który
Number.isNaN
sprawdza się zarówno pod względem fałszowania, jak i sprawdzania. Wszystkie trzy działają lepiej niżisNan
Wyniki
Może się przydać, jeśli chcesz uniknąć zepsutej
isNaN
funkcji.źródło
Jeśli twoje środowisko obsługuje ECMAScript 2015 , możesz użyć
Number.isNaN
tego, aby upewnić się, że wartość jest naprawdęNaN
.Problem
isNaN
polega na tym, że jeśli używasz tego z danymi nienumerycznymi, stosuje się niewiele mylących reguł (zgodnie z MDN). Na przykład,Tak więc w środowiskach obsługiwanych przez ECMA Script 2015 możesz chcieć użyć
źródło
isNaN
możesz mieć kłopoty i pamiętaj, aby używaćNumber.isNaN
w środowiskach ECMAScript 2015 :-)NaN w JavaScript oznacza „Not A Number”, chociaż jego typ to w rzeczywistości liczba.
Aby sprawdzić, czy zmienna ma wartość NaN, nie możemy po prostu użyć funkcji isNaN (), ponieważ isNaN () ma następujący problem, patrz poniżej:
To, co się naprawdę dzieje, to fakt, że myVar jest domyślnie przymuszany do pewnej liczby:
To ma sens, ponieważ „A” w rzeczywistości nie jest liczbą. Ale tak naprawdę chcemy sprawdzić, czy myVar ma dokładnie wartość NaN.
Więc isNaN () nie może pomóc. Co zatem powinniśmy zrobić?
W świetle tego, że NaN jest jedyną wartością JavaScript, która jest traktowana nierówno względem siebie, więc możemy sprawdzić jej równość względem siebie za pomocą! ==
Podsumowując , jeśli prawdą jest, że sama zmienna! ==, to ta zmienna ma dokładnie wartość NaN:
źródło
Korzystam z
isNaN
funkcji podkreślenia, ponieważ w JavaScript:Przynajmniej bądź świadomy tej gotcha.
źródło
undefined
jako niepoprawne? To prawda, żeundefined
nie jest liczbą, prawda?undefined
może być czymś innym niżNaN
, ale wciąż nie jest liczbą, więcisNaN(undefined)
powinien być (i jest)true
Może także to:
źródło
Wygląda na to, że isNaN () nie jest obsługiwany w Node.js po wyjęciu z pudełka.
Pracowałem z
źródło
źródło
Spójrz na dokumentację Mozilli Globalna właściwość NaN jest wartością reprezentującą Not-A-Numbe
Najlepszym sposobem jest użycie „isNaN ()”, która jest wbudowaną funkcją sprawdzania NaN. Wszystkie przeglądarki obsługują sposób ..
źródło
Reguła jest następująca:
Problemem funkcji isNaN () jest to, że w niektórych przypadkach może zwrócić nieoczekiwany wynik:
Lepszym sposobem sprawdzenia, czy naprawdę jest NaN, jest:
źródło
Według IEEE 754 wszystkie relacje z udziałem NaN są oceniane jako fałszywe, z wyjątkiem! =. Zatem na przykład (A> = B) = fałsz i (A <= B) = fałsz, jeśli A lub B lub oba są / są NaN.
źródło
Napisałem tę odpowiedź na inne pytanie na StackOverflow, gdzie inna sprawdza kiedy,
NaN == null
ale potem została oznaczona jako duplikat, więc nie chcę marnować pracy.Spójrz na Mozilla Developer Network o
NaN
.Krótka odpowiedź
Po prostu użyj,
distance || 0
jeśli chcesz mieć pewność, że cenisz właściwy numer lubisNaN()
go sprawdzić.Długa odpowiedź
NaN (Not-a-Number) to dziwny obiekt globalny w javascript, często zwracany w przypadku niepowodzenia niektórych operacji matematycznych.
Chciałeś sprawdzić,
NaN == null
które wynikifalse
. Hovewer nawetNaN == NaN
wyniki zfalse
.Prosty sposób na sprawdzenie, czy zmienna jest
NaN
funkcją globalnąisNaN()
.Innym jest
x !== x
prawdą tylko wtedy, gdy x jest NaN. (dzięki za przypomnienie @ raphael-schweikert)Ale dlaczego krótka odpowiedź zadziałała?
Dowiedzmy Się.
Po wywołaniu
NaN == false
wynik jestfalse
taki sam jakNaN == true
.Gdzieś w specyfikacjach JavaScript ma rekord z zawsze fałszywymi wartościami, który obejmuje:
NaN
- Brak numeru""
- pusta strunafalse
- boolean falsenull
- zerowy obiektundefined
- niezdefiniowane zmienne0
- numerycznie 0, w tym +0 i -0źródło
var xIsNaN = x !== x;
daje to wartość prawdy tylko wtedy, gdy x jestNaN
.Inne rozwiązanie wspomniane jest na stronie parseFloat w MDN
Zapewnia funkcję filtrowania do dokładnego analizowania
A potem możesz użyć,
isNaN
aby sprawdzić, czy tak jestNaN
źródło
Dokładny sposób sprawdzenia to:
źródło
Stworzyłem tę małą funkcję, która działa jak urok. Zamiast sprawdzania NaN, który wydaje się sprzeczny z intuicją, sprawdzasz liczbę. Jestem pewien, że nie jestem pierwszym, który zrobił to w ten sposób, ale pomyślałem, że się podzielę.
źródło
Znalazłem inny sposób, dla zabawy.
źródło
Odpowiedź markyzm działa dobrze, ale nie zwraca fałszu,
Infinity
ponieważ Infinity technicznie nie jest liczbą.wymyśliłem
isNumber
funkcję, która sprawdzi, czy jest to liczba.AKTUALIZACJA: zauważyłem, że ten kod zawodzi w przypadku niektórych parametrów, więc poprawiłem go.
źródło
To nie jest eleganckie. ale po wypróbowaniu isNAN () doszedłem do tego rozwiązania, które jest kolejną alternatywą. W tym przykładzie zezwoliłem również na „.” ponieważ maskuję za float. Możesz to również odwrócić, aby upewnić się, że nie są używane żadne liczby.
Jest to ocena jednoznakowa, ale można również zapętlić ciąg znaków, aby sprawdzić dowolne liczby.
źródło
Możesz sprawdzić NaN za pomocą funkcji javascript isNaN. Tylko przekazanie liczby lub wartości do funkcji isNaN
źródło
Po prostu przekonwertuj wynik na String i porównaj z „NaN”.
źródło
Czy (NaN> = 0) ? ...... „ Nie wiem ”.
Warunki są wykonywane tylko wtedy, gdy PRAWDA .
Nie na FAŁSZ .
Nie w „ Nie wiem ”.
źródło