Jak sprawdzić, czy zmienna nie ma wartości NULL?

Odpowiedzi:

399

Nie są równoważne. Pierwszy wykona blok następujący po ifinstrukcji if myVarjest prawdomówny (tzn. Ocenitrue warunkowo), a drugi wykona blok, jeśli myVarma dowolną wartość inną niż null.

Jedyne wartości, które nie są zgodne z prawdą w JavaScript, są następujące (inaczej wartości fałszowania ):

  • null
  • undefined
  • 0
  • "" (pusty ciąg)
  • false
  • NaN
Tim Down
źródło
69

Oto jak możesz sprawdzić, czy zmienna nie ma wartości NULL:

if (myVar !== null) {...}

blok zostanie wykonany jeśli myVar nie jest null .. zostanie wykonany jeśli myVar jest niezdefiniowana lub fałszywe lub 0lub NaNlub cokolwiek innego ..

Tolgahan Albayrak
źródło
1
W przypadku osób zastanawiających się ... To nie sprawdza pustego ciągu ("")i niezdefiniowanego. Zobacz moje skrzypce jako odniesienie: jsfiddle.net/b0tm7yaf
Barrosy
47

Przeczytaj ten post: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Zawiera kilka fajnych wskazówek dotyczących JavaScript, ale wspomina o tym, że należy sprawdzić wartość null, np .:

if(myvar) { }

Wspomina także o tym, co uważa się za „falsey”, czego możesz nie zdawać sobie sprawy.

Jonathon Bolster
źródło
33
Ta kontrola nie jest w rzeczywistości bezpieczna. Jeśli myvar ma wartość 0, false lub inną wartość fałszowania, test zakończy się niepowodzeniem (jeśli zamierzasz sprawdzić, czy nie ma wartości null). Dlatego używaj tego tylko do sprawdzania, czy nie jest pusta, jeśli zmienna nigdy nie może mieć innej wartości fałszowania.
Werzi2001
2
link już nie działa. Znalazłem kopię tego, co wydaje się być postem tutaj: appendto.com/2010/10/... To dziwne, ponieważ post Elijaha (i przykładowy kod) sugerowałby, że jest autorem, ale nie jest tam wymieniony jako autor ...
thepaulpage
2
Wygląda na to, że ta strona już nie istnieje. Przydałoby się podanie informacji w samym poście, a nie tylko zewnętrznego linku.
apraetor
To nie zadziała, jeśli obecna wartość będzie
wynosić
15
  • kod wewnątrz if(myVar) { code }NIE zostanie wykonany tylko wtedy, gdy myVarjest równy: false, 0, "", null, undefined, NaNlub nigdy nie zdefiniowałeś zmiennej myVar(wtedy dodatkowo kod zatrzyma wykonanie i zgłasza wyjątek).
  • kod wewnątrz if(myVar !== null) {code}NIE zostanie wykonany tylko wtedy, gdy myVarjest równy nulllub nigdy go nie zdefiniowałeś (zgłasza wyjątek).

Tutaj masz wszystko ( src )

Jeśli

wprowadź opis zdjęcia tutaj

== (jego negacja ! = )

wprowadź opis zdjęcia tutaj

=== (jego negacja ! == )

wprowadź opis zdjęcia tutaj

Kamil Kiełczewski
źródło
9

Jest inny możliwy scenariusz, z którym właśnie się spotkałem.

Zrobiłem wywołanie ajax i odzyskałem dane jako null, w formacie łańcuchowym. Musiałem to sprawdzić w ten sposób:

if(value != 'null'){}

Tak więc null był łańcuchem, który czytał „null”, a nie tak naprawdę był null.

EDYCJA: Należy rozumieć, że nie sprzedaję tego tak, jak należy . Miałem scenariusz, w którym był to jedyny sposób, aby to zrobić. Nie jestem pewien, dlaczego ... może facet, który napisał back-end, przedstawiał dane niepoprawnie, ale niezależnie od tego, to jest prawdziwe życie. To frustrujące, gdy ktoś głosuje w dół, gdy ktoś rozumie, że to nie do końca dobrze, a następnie głosuje w górę przez kogoś, kto w rzeczywistości pomaga.

Flat Cat
źródło
Zamiast tego parsuj swoją wartość niż porównując z nullłańcuchami.
Bergi,
1
Ta odpowiedź jest uzasadniona, niezależnie od tego, czy rozumiesz jej zastosowanie. Nie podoba mi się to, że jestem uprzywilejowany za publikowanie rzeczy, które faktycznie działały. Czy zauważyłeś, że miał głos, zanim go dotknąłeś? To dlatego, że to prawdziwy scenariusz.
Flat Cat
3
tak i przegłosowałem, ponieważ uważam, że to złe rozwiązanie. W przypadku wywołania ajax lepiej jest zrobić, value = JSON.parse(value)a następnie skorzystać z prostego i właściwego value != nulltestu
Bergi
2
Najwyraźniej nie rozumiesz. Zdaję sobie sprawę, że tak myślisz, ale nie.
Flat Cat
4
Rozumiem, że to działające rozwiązanie. Ale nie sądzę, że to dobra rada, więc proszę uszanuj moje zdanie.
Bergi,
1

jeśli myVarjest zerowy, to jeśli blok nie wykona się w inny sposób, wykona się.

if (myVar != null) {...}

Sanjay Kumaar
źródło
Nie ciąg 'null', ale wartość specjalna null.
Micah Walter
1

Czasami, jeśli nie został nawet zdefiniowany, lepiej się przygotować. Do tego użyłem typeof

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}
OpenUser
źródło
-4

Dwie wymienione tutaj instrukcje warunkowe nie są lepsze od siebie. Twoje użycie zależy od sytuacji. Nawiasem mówiąc, masz literówkę w drugim przykładzie. Po wykrzykniku powinien znajdować się tylko jeden znak równości.

Pierwszy przykład określa, czy wartość w myVar ma wartość true, i wykonuje kod w {...}

Drugi przykład ocenia, czy myVar nie jest równy null, a jeśli ten przypadek jest prawdziwy, wykona kod wewnątrz {...}

Proponuję zajrzeć do instrukcji warunkowych, aby uzyskać więcej technik. Po ich zapoznaniu się możesz zdecydować, kiedy ich potrzebujesz.

DOKTOR
źródło
12
To chyba nie jest literówka w drugim przykładzie. Ta sekunda =jest kluczowa i ma ogromny wpływ na pytanie. Być może nie jesteś świadomy istnienia !==i ===operatorów w JavaScript?
Tim Down
1
Dzięki za zwrócenie na to uwagi. Natychmiast pomyślałem, że to literówka, ale teraz przypominam sobie to, czego od jakiegoś czasu nie widziałem i o czym zapomniałem.
LEKARZ