Jak mogę sprawdzić wartości zerowe w JavaScript? Napisałem poniższy kod, ale nie działał.
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
Jak mogę znaleźć błędy w moich programach JavaScript?
javascript
null
compare
Mahdi_Nine
źródło
źródło
null
w js powinno być wykonane przy użyciu ścisłego operatora===
Odpowiedzi:
JavaScript jest bardzo elastyczny w zakresie sprawdzania wartości „zerowych”. Zgaduję, że faktycznie szukasz pustych ciągów, w takim przypadku ten prostszy kod będzie działał:
Który sprawdzi pustych strunach (
""
),null
,undefined
,false
oraz numery0
iNaN
Należy pamiętać, że jeśli konkretnie sprawdza się liczby, często pomija się
0
tę metodę inum !== 0
jest preferowane (num !== -1
lub~num
(hacky kod, który sprawdza również-1
)) dla funkcji, które zwracają-1
, np.indexOf
)źródło
!
ani!!
do testowania danych typowo numerycznychnull
aniundefined
na nich, chyba że chcesz również wyrzucić wartości 0.0
...”. Uważam, że ta odpowiedź jest całkowicie odpowiednia dla pytania, ponieważ biorąc pod uwagę kontekst (który rozumiem to „nazwa użytkownika, hasło, adres e-mail”), nie sprawdzają0
wartości. Biorąc jednak pod uwagę popularność tego pytania i odpowiedzi, zgadzam się, że warto wspomnieć w samej odpowiedzi.Aby sprawdzić, czy nie ma wartości SZCZEGÓŁOWE , użyłbyś tego:
Ten test będzie tylko udawać
null
i nie przejdzie do""
,undefined
,false
,0
, lubNaN
.Dodatkowo podałem bezwzględne kontrole dla każdej „fałszywej” wartości (tej, która zwróciłaby wartość true
!variable
).Uwaga: w przypadku niektórych kontroli bezwzględnych konieczne będzie wdrożenie funkcji
absolutely equals: ===
itypeof
.Utworzyłem JSFiddle tutaj aby pokazać wszystkie z poszczególnych testów pracy
Oto wynik każdej kontroli:
Jak widać, testowanie przeciwko jest nieco trudniejsze
NaN
;źródło
===
ścisłej równości? Dzięki. Również dla testu NaN możesz użyćisNaN(value)
, który zwrócitrue
tylko wtedy, gdy zmienna jest równa NaN.variable === null
nie ma typu „obiekt”? Jeśli nie, dlaczego nie uprościć czekuvariable === null
, wyrzucając drugi koniunkturę? Dzięki.variable === null
co właśnie przetestowałem tutaj w tym JSFiddle . Powodem, dla którego użyłem również obiektu „&& typeof zmienna ===”, było nie tylko zilustrowanie interesującego faktu, żenull
wartość jest typemobject
, ale także zachowanie ciągłości innych kontroli. Ale tak, podsumowując, jesteś bezpieczny w użyciu po prostuvariable === null
.po prostu wymienić
==
się===
we wszystkich miejscach.==
to luźne lub abstrakcyjne porównanie równości===
jest ścisłym porównaniem równościAby uzyskać więcej informacji, zobacz artykuł MDN na temat porównań i identyczności równości .
źródło
undefined
tak nie jestnull
. W przeciwnym razie spowoduje to wiele nieoczekiwanych zachowań. Zasadniczo, jeśli interesują Cię obienull
/undefined
nie wartości fałszowania, użyj==
(jednego z niewielu przypadków, kiedy powinieneś to zrobić).undefined
nie jestnull
: stackoverflow.com/a/5076962/753237Operator ścisłej równości:
Możemy sprawdzić wartość null przez
===
Tylko za pomocą
if
oceni prawdę, jeśli wartość nie jest :
źródło
Ulepszenie w stosunku do zaakceptowanej odpowiedzi poprzez jawne sprawdzenie,
null
ale z uproszczoną składnią:źródło
Po pierwsze, masz instrukcję return bez treści funkcji. Są szanse, że spowoduje to błąd.
Bardziej czystym sposobem na sprawdzenie byłoby po prostu użycie! operator:
źródło
możesz wreszcie spróbować złapać
możesz także
throw
własne błędy. Zobacz to .źródło
W JavaScript żaden ciąg znaków nie jest równy
null
.Być może spodziewałeś się, że
pass == null
to prawda, gdypass
pusty ciąg znaków, ponieważ masz świadomość, że operator luźnej równości==
dokonuje pewnego rodzaju przymusu typu.Na przykład to wyrażenie jest prawdziwe:
Natomiast operator ścisłej równości
===
mówi, że jest to fałsz:Biorąc to pod uwagę
''
i0
są luźno równe, możesz rozsądnie przypuszczać, że''
inull
są luźno równe. Jednak nie są.To wyrażenie jest fałszywe:
Wynik porównania dowolnego ciągu znaków
null
jest fałszywy. Dlategopass == null
wszystkie pozostałe testy są zawsze fałszywe, a użytkownik nigdy nie otrzymuje ostrzeżenia.Aby naprawić kod, porównaj każdą wartość z pustym ciągiem:
Jeśli masz pewność, że
pass
jest to ciąg,pass == ''
zadziała również, ponieważ tylko pusty ciąg jest luźno równy pustemu ciągowi. Z drugiej strony niektórzy eksperci twierdzą, że dobrą praktyką jest zawsze stosowanie ścisłej równości w JavaScript, chyba że specjalnie chcesz zastosować przymus typu, który wykonuje operator luźnej równości.Jeśli chcesz wiedzieć, które pary wartości są luźno równe, zobacz tabelę „Porównania podobieństwa” w artykule Mozilli na ten temat .
źródło
aby sprawdzić, czy w javascript jest niezdefiniowana i pusta , wystarczy napisać:
źródło
To jest komentarz dotyczący rozwiązania WebWanderer dotyczącego sprawdzania NaN (nie mam jeszcze wystarczającej liczby przedstawicieli, aby zostawić formalny komentarz). Rozwiązanie brzmi jak
ale to się nie powiedzie w przypadku liczb wymiernych, które zaokrągliby do
0
, takich jakvariable = 0.1
. Lepszym testem byłoby:źródło
parseInt
naparseFloat
(co powinno być dla mnie oczywiste w pierwszej kolejności). Unikałem używania tejisNan
funkcji, ponieważ wydaje mi się, że wielu programistów postrzega takie funkcje, jakisNaN
pewnego rodzaju „magiczne pudełko”, w które wchodzą wartości i wychodzą z nich booleany, i chciałem przetestować nieco bardziej szczegółowo. Ale tak, sugerowany test będzie działał i jest całkowicie w porządku. Przykro mi, ale do tej pory nie zauważyłem twojego wpisu.isNaN
jak dobrze, mogę dostać za tą logiką. Istnieje również metoda Underscore.js, która wydaje się jeszcze bardziej zagmatwana / blackbox, ale i tak warto ją zauważyć, ponieważ korzysta z niejNaN !== NaN
.Object.prototype.toString.call(variable) === '[object Number]' && variable !== +variable
Właściwie myślę, że możesz potrzebować użyć,
if (value !== null || value !== undefined)
ponieważ jeśli użyjeszif (value)
, możesz również odfiltrować 0 lub fałszywe wartości.Rozważ te dwie funkcje:
W mojej sytuacji, po prostu potrzebne, aby sprawdzić, czy wartość jest null i niezdefiniowana i nie chcę aby filtrować
0
albofalse
czy''
wartości. więc użyłem drugiego testu, ale może być konieczne ich też odfiltrowanie, co może spowodować, że użyjesz pierwszego testu.źródło
Znalazłem inny sposób na sprawdzenie, czy wartość jest pusta:
null
Działa jaknumber
iobject
w tym samym czasie. Porównywanienull >= 0
lubnull <= 0
wyniki wtrue
. Porównującnull === 0
lubnull > 0
czynull < 0
spowoduje fałszywy. Ale podobnie jaknull
obiekt możemy go wykryć jako zerowy.Zrobiłem bardziej złożoną funkcję, że czarownica poradzi sobie lepiej niż typeof i można powiedzieć, jakie typy należy uwzględnić lub zachować w grupie
źródło
Zrobiłem tę bardzo prostą funkcję, która działa cuda:
Trasa to dowolny łańcuch wartości, który może wybuchnąć. Używam go do jQuery / cheerio i obiektów i tym podobnych.
Przykłady 1: obiekt prosty, jak to
const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};
.Ale może to być bardzo duży przedmiot, którego nawet nie stworzyliśmy. Więc przekazuję to przez:
Oczywiście jeśli wolisz, możesz użyć
null
albo'No value'
... Niezależnie od własnych potrzeb.Zwykle zapytanie DOM lub selektor jQuery może zgłosić błąd, jeśli nie zostanie znaleziony. Ale używając czegoś takiego:
źródło
Możesz użyć modułu lodash, aby sprawdzić, czy wartość jest pusta lub niezdefiniowana
LINK: https://lodash.com/docs/#isNil
źródło
To nie zadziała w przypadku wartości logicznych pochodzących z DB np.
źródło
AFAIK w JAVASCRIPT, gdy zmienna jest zadeklarowana, ale nie ma przypisanej wartości, jej typ to
undefined
. więc możemy sprawdzić zmienną, nawet jeśli byłaby to instancjaobject
trzymająca miejsce zamiast wartości .utwórz metodę pomocniczą do sprawdzania zwracanej wartości null
true
i użyj jej w interfejsie API.funkcja pomocnicza, aby sprawdzić, czy zmienna jest pusta:
try-catch wyjątkowe wywołanie API:
niektóre przypadki testowe:
źródło
isEmpty
funkcja działa dokładnie tak samo!
. Nie trzeba wymyślać funkcji. Po prostu zróbif (!pass || !cpass || !email ...)
. (Które jest już pokazane w zaakceptowanej odpowiedzi.) I na komentarz WebWanderer, środkowa część tego postu, „spróbuj złapać wyjątkowe wywołanie API”, wydaje się nie mieć związku z tym pytaniem. Proszę wyjaśnić swoje zamiary - kiedy to jest przydatne? Jak to się ma do pytania?Sprawdzanie warunków błędu:
źródło
Spróbuj tego:
źródło
if (variable === null)
? Również ktoś podał tę odpowiedź w zeszłym roku: stackoverflow.com/a/27550756/218196 .