Jak mogę ustalić, czy zmienna jest „niezdefiniowana” czy „pusta”?

2126

Jak ustalić, czy zmienna jest undefinedlub null?

Mój kod jest następujący:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

Ale jeśli to zrobię, interpreter JavaScript przestanie działać.

sadmicrowave
źródło
Możliwy duplikat Jak sprawdzić pusty ciąg w JavaScript?
T.Todua,

Odpowiedzi:

2846

Możesz użyć właściwości abstrakcyjnego operatora równości, aby to zrobić:

if (variable == null){
    // your code here.
}

Ponieważ null == undefinedto prawda, powyższy kod przechwytuje zarówno nulli undefined.

Sarfraz
źródło
5
Próbuję testu jeśli zdarzenie jest nieważna w firefox i bloki an error wykonanie: „zdarzenie jest niezdefiniowana”
Entretoize
3
@MichaelFever Jak to nie działa? Skopiuj wklej to do swojej konsoli: const y = undefined; y == null;Powinien powrócićtrue
Seraf
2
@ChrisStryczynski Na przykład ze swojego komentarza zadeklarowałeś ystały, ale porównujesz abc(nie y). Kiedy testowałem yprzez console.log(y == null);Chrome i Firefox, otrzymałem truewynik. Jeśli wystąpił błąd, być może próbowałeś użyć operatora przypisania =zamiast porównania, ==co miałoby sens zwracać błąd, ponieważ constnie można go ponownie przypisać.
Pshemo
2
przykład odpowiednich porównań na żywo. LGM.
Ryan Haining
2
@ZaytsevDmitry dlaczego miałbyś oczekiwać testu, jeśli zmienna jest, nulllub undefinedprzejść, jeśli zmienna jest równa 0? Pytanie nie dotyczy testowania pod kątem prawdziwej wartości, ale testowanie wprost pod kątem nulllub undefined.
rodrigo-silveira
1106

Standardowy sposób łapania nulli undefinedjednocześnie jest następujący:

if (variable == null) {
     // do something 
}

- który jest w 100% równoważny z bardziej wyraźnym, ale mniej zwięzłym:

if (variable === undefined || variable === null) {
     // do something 
}

Pisząc profesjonalną JS, przyjmuje się za pewnik, że równość typów===== jest zrozumiała, a zachowanie vs jest zrozumiałe. Dlatego używamy ==i tylko porównujemy null.


Edytuj ponownie

Komentarze sugerujące użycie typeofsą po prostu błędne. Tak, moje powyższe rozwiązanie spowoduje błąd ReferenceError, jeśli zmienna nie istnieje. To coś dobrego. Błąd ReferenceError jest pożądany: pomoże ci znaleźć błędy i naprawić je przed wysłaniem kodu, podobnie jak błędy kompilatora w innych językach. Użyj try/, catchjeśli pracujesz z danymi wejściowymi, nad którymi nie masz kontroli.

Nie powinieneś mieć żadnych odniesień do niezadeklarowanych zmiennych w swoim kodzie.

nazwa_użytkownika tymczasowego
źródło
47
Spowoduje to wystąpienie błędu ReferenceErr i przerwanie wykonywania, jeśli zmienna nie jest zdefiniowana lub nie ma w niej odwołania w kodzie, użycie typeof jest bezpieczniejsze.
Mani Gandham
56
To bardziej kwestia stylistyczna. Jeśli zmienna nie została zadeklarowana w ogóle , to naprawdę tylko złe pisanie ze strony autora. Powinieneś wiedzieć, czy twoja zmienna została zadeklarowana, czy nie, to nie powinno być pytanie. Ale tak , jeśli z jakiegoś powodu tak jest, powinno się to zmienić na window.variable zamiast po prostu zmiennej , co nie spowoduje błędu odniesienia. Należy unikać Typeof.
tymczasowego
6
Tak, ponieważ napisałeś !==zamiast !=.
tymczasowego
9
-OP: Stwierdzenie, że te porównania są „w 100% równoważne” jest PO PROSTU NIEPRAWIDŁOWE, jak zauważyłeś we własnej EDYCJI, drugie spowoduje błąd ReferenceError. Co do twierdzenia: „Nie powinieneś mieć żadnych odniesień do niezadeklarowanych zmiennych w swoim kodzie”. NAPRAWDĘ? Słyszałeś kiedyś o parametrach opcjonalnych? jsfiddle.net/3xnbxfsu
Timothy
16
@TimothyKanski parametry opcjonalne mogą być niezdefiniowane, jeśli nie są opcjonalnie podane, ale są zdecydowanie zadeklarowanymi zmiennymi. Są zadeklarowane i mają wartość undefined, jak każda deklarowana, ale niezainicjowana zmienna, tzn. var someVar;Więc twój argument tak naprawdę nie wytrzyma
chiliNUT
227

Łącząc powyższe odpowiedzi, wydaje się, że najbardziej kompletną odpowiedzią byłoby:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

Powinno to działać dla każdej zmiennej, która jest niezadeklarowana lub zadeklarowana i jawnie ustawiona na null lub niezdefiniowana. Wyrażenie logiczne powinno mieć wartość false dla każdej deklarowanej zmiennej, która ma rzeczywistą wartość inną niż null.

jkindwall
źródło
2
@Aerovistae Rozumiem, że typeofto operator, a nie funkcja, więc nie potrzebuje nawiasów, ale mimo to doceniam nawiasy - po prostu dla czytelności.
user664833
1
co z bezpośrednim sprawdzaniem, czy (zmienna === niezdefiniowana) zamiast używania typeof?
Frozen Crayon
2
@ArjunU, który spowoduje błąd ReferenceError, jeśli zmienna nie zostanie zadeklarowana. Jeśli nie wiesz, czy zmienna została zadeklarowana, skorzystaj z powyższego rozwiązania. Jeśli możesz zagwarantować, że zmienna jest co najmniej zadeklarowana, możesz użyćvariable == null
Łotr
3
Jest to lepsze rozwiązanie, ponieważ jak wskazał @Rogue, zmienna może nie zostać zadeklarowana.
Abdul Sadik Yalcin
Popraw mnie, jeśli się mylę, ale czy pierwszy warunek nie jest nadzbiorem drugiego, a zatem drugi warunek jest zbyteczny?
Marzec Ho
186
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
knocte
źródło
14
Na wypadek, gdyby ktoś pomyślał, że to kolejna odpowiedź na pół odpowiedzi, to faktycznie działa. undefinedocenia równe null.
Chuck
3
Nie udało mi się w konsoli Chrome ... ReferenceError: zmienna nie jest zdefiniowana, więc może działać, ale nie dla mnie ...
Eran Medan
48
Działa tylko w przypadku zadeklarowanych zmiennych, a nie zmiennych, które mogą lub nie mogą być zadeklarowane, co rzadko się zdarza. (W tym przypadku musisz użyć typeof +
11
Właśnie zorientowałem się, że możesz dodać ten komentarz: /*jshint eqnull:true */na górze dokumentu lub funkcji JS, a JSHint przestanie ostrzegać o twoich zastosowaniach == null.
Web_Designer,
3
@Aerovistae możesz wskazać mi odniesienie, które wyraźnie stwierdza, że ==jest zepsute. Przymus if(variable == null)w tej odpowiedzi ma dla mnie pełny sens ...
Ben Aston
93
if (typeof EmpName != 'undefined' && EmpName) {

oceni prawdę, jeśli wartość nie jest:

  • zero

  • nieokreślony

  • NaN

  • pusta struna ("")

  • 0

  • fałszywe

Thamaraiselvam
źródło
13
Myślę, że to niebezpieczna technika, która rozprzestrzeniła się jak dziki ogień. Ponieważ wiele sprawdzanych zmiennych może być typu logicznego lub liczbowego. Więc jeśli użytkownik nie w pełni rozumie konsekwencje, nie jest to dobre.
przydatneBe
Podaj odniesienie do tej specyfikacji javascript
villamejia
1
To jest to samo co if (EmpName). Jeśli to już undefinedbędzie fałsz.
Rudy
Jeśli zmienna nie jest zdefiniowana. to jeśli (EmpName) zgłosi błąd
Thamaraiselvam,
1
@Thamaraiselvam Myślę, że Rudy mógł to mieć na myśli var EmpName; if (EmpName). Gdzie zmienna jest zdefiniowana, ale nie ma przypisanej wartości.
hungerstar
27

attr()Funkcja jQuery zwraca pusty ciąg znaków lub rzeczywistą wartość (i nigdy nulllub undefined). Powraca tylko wtedy, undefinedgdy selektor nie zwrócił żadnego elementu.

Możesz więc przetestować pusty ciąg. Alternatywnie, ponieważ puste ciągi, puste i niezdefiniowane są fałszywe-y, możesz po prostu to zrobić:

if (!EmpName) { //do something }
Chetan Sastry
źródło
1
Chrome 17.0.963.78 m daje ten błąd:ReferenceError: EmpName is not defined
Eran Medan
6
@EranMedan Wiem, że jest późno, ale mam nadzieję, że pomoże ludziom, którzy tu przybędą później. Przyczyną błędu jest to, że w ogóle nie został zadeklarowany. Zwykle EmpName (lub inna zmienna) jest przekazywana do funkcji lub zwracana wartość innej funkcji i dlatego deklarowana (Przykład: „var x;”). Aby sprawdzić, czy zwrócił niezdefiniowany, zerowy lub pusty ciąg, możesz użyć powyższego rozwiązania.
Dave
Zdaję sobie sprawę, że to zimne pytanie, ale jQuery zwróci, undefinedjeśli atrybut nie istnieje na elemencie (nie tylko, jeśli selektor nie ma pasujących elementów, zgodnie z odpowiedzią). Na przykład „ imgbez” srcwróciłoby undefineddo$('img').attr('src');
kodowanie rąk
19

Przyszedłem do tego napisać własną funkcję. JavaScript jest dziwny.

Można go używać dosłownie na wszystkim. (Zauważ, że sprawdza to również, czy zmienna zawiera jakieś użyteczne wartości . Ale ponieważ ta informacja jest zwykle potrzebna, myślę, że warto ją opublikować). Proszę rozważyć pozostawienie notatki.

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

Kompatybilny z TypeScript.


Ta funkcja powinna robić dokładnie to samo, co empty()funkcja PHP (patrz RETURN VALUES)

Uważa undefined, null, false, 0, 0.0, "0" {}, []jako pusty.

"0.0", NaN, " ", trueSą uważane za niepusty.

phil294
źródło
2
Wystąpił problem z zerowym sprawdzaniem. Chcę sprawdzić, czy przekazywany parametr ma wartość NULL, czy pusty obiekt { }. To powszechny i ​​głupi problem językowy, ale o tym zapomniałem. Wszystkie moje wyszukiwania pokazują odpowiedzi na niezdefiniowane wartości zerowe lub luźne porównania równości (==), ale nie ścisłe równości (===) lub równoważne. A potem tutaj, w odpowiedzi na -1 pozycji na samym dole strony (zanim przegłosowałem), znalazłem odpowiedź, która mi umknęła. Object.keys( obj ).length < 1a może === 0, zakładając, że nigdy nie będzie -1. W każdym razie, podniesiony do zera, woo. : p
Dzięki, mogłem wrzucić tę funkcję i wyczyścić dużo kodu. Dlaczego to nie jest standardowa funkcja JS, jest poza mną.
Andy
3
Należy zmienić wszystko z Twojego ==aby ===tutaj, to byłoby to rozsądne działanie.
Ben McIntyre
12

Jeśli zmienna, którą chcesz sprawdzić, jest globalna, zrób

if (window.yourVarName) {
    // Your code here
}

Ten sposób sprawdzania nie spowoduje zgłoszenia błędu, nawet jeśli yourVarNamezmienna nie istnieje.

Przykład: Chcę wiedzieć, czy moja przeglądarka obsługuje History API

if (window.history) {
    history.back();
}

Jak to działa:

windowjest obiektem, który przechowuje wszystkie zmienne globalne jako swoje właściwości, aw JavaScript można próbować uzyskać dostęp do nieistniejącej właściwości obiektu. Jeśli historynie istnieje, to window.historyzwraca undefined. undefinedjest falsey, więc kod w if(undefined){}bloku nie będzie działał.

DenisS
źródło
2
Czytelnicy powinni zauważyć, że takie podejście jest idiomatyczne do sprawdzania - z poziomu JavaScript uruchomionego w przeglądarce - czy zmienna globalna została zadeklarowana, a zwłaszcza czy dostępna jest globalna wersja przeglądarki (jak API historii). To nie będzie działać na sprawdzenie czy zmienna non-global jest nulllub undefinedbędzie działać jeśli twój JavaScript jest uruchomiony poza przeglądarką (czyli w node.js), ani. Będzie również traktować globalne ustawienie 0, falselub ''takie same jak te, które są niezgłoszonych lub undefinedlub null, co jest zwykle w porządku.
Mark Amery
Zakłada się, że skrypt działa w przeglądarce. To nie jest dane.
GreenAsJade,
12

Najkrótszy i najłatwiejszy:

if(!EmpName ){
 // DO SOMETHING
}

to oceni prawdę, jeśli EmpName to:

  • zero
  • nieokreślony
  • NaN
  • pusty
  • strunowy ("")
  • 0
  • fałszywe
userPlus
źródło
3
Przykładem tutaj jest to, że chcę poznać różnicę między niezdefiniowanym a fałszywym. Użyję wtedy czeku zerowego.
gast128
11

Prawdopodobnie najkrótszym sposobem na to jest:

if(EmpName == null) { /* DO SOMETHING */ };

Oto dowód:

A oto więcej szczegółów na temat ==(źródło tutaj )

Wpisz opis zdjęcia tutaj

BONUS : dlaczego ===jest bardziej jasne niż ==(spójrz na odpowiedź agc )

Wpisz opis zdjęcia tutaj

Kamil Kiełczewski
źródło
8

Właśnie miałem ten problem, tj. Sprawdzanie, czy obiekt jest pusty.
Po prostu używam tego:

if (object) {
    // Your code
}

Na przykład:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}
Walijczyk
źródło
3
lepiej byłoby ustawić var ​​A = document.getElementById („enterJob”), jeśli (A) A.className + = 'current'; w ten sposób wykonujesz 50% pracy dla tego samego rezultatu ... Ale może właśnie zrobiłeś to dla programów, a potem pozdrawiam.
Harry Svensson,
7

Ponieważ używasz jQuery , możesz określić, czy zmienna jest niezdefiniowana, czy jej wartość jest pusta, używając pojedynczej funkcji.

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;
Angelin Nadar
źródło
To mi nie zadziałało. Nadal dostaję błąd: ReferenceError: s is not definedna pierwszy przykład.
Mark
5

Element sprawdzający jQuery nie jest pusty:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}
Kapil
źródło
4

W JavaScript, zgodnie z moją wiedzą, możemy sprawdzić niezdefiniowaną, zerową lub pustą zmienną, jak poniżej.

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

Sprawdź wszystkie warunki:

if(variable === undefined || variable === null || variable === ''){
}
DevAelius
źródło
varto słowo zastrzeżone, to rzuciSyntaxError
zimą
4

Możesz po prostu użyć następujących (wiem, że istnieją krótsze sposoby, aby to zrobić, ale może to ułatwić wizualną obserwację, przynajmniej dla innych osób oglądających kod).

if (x === null || x === undefined) {
 // Add your response code here, etc.
}
agc
źródło
3

Najłatwiejszym sposobem sprawdzenia jest:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}
M. Arnold
źródło
1
Spowoduje to wykonanie kodu, jeśli zmienna ma wartość false, co jest potencjalnie niepożądane.
byxor
Pytanie jest jasne „Jak ustalić, czy zmienna jest„ niezdefiniowana ”czy„ pusta ”? aw javascript, jeśli zmienna ma wartość null lub niezdefiniowaną, jej wartość to false.
M. Arnold
1
Przepraszam, ale to nieprawda. Oto JSfiddle, aby to udowodnić.
byxor
Przez swoją odpowiedź, undefined, null i kilka innych rzeczy, takich jak pusty ciąg, +0, -0 NaNi falseprzejść. !operator wymusza operand variable- tutaj - do Boolean: ecma-international.org/ecma-262/#sec-toboolean
Alireza
Ale sprawdź pytanie: „Jak ustalić, czy zmienna jest niezdefiniowana czy pusta”,! operand użyty z parametrem if zawsze powróci do wartości true, jeśli zmienna ma wartość NULL lub jest niezdefiniowana.
M. Arnold
2

Z rozwiązaniem poniżej:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

Jestem w stanie sprawdzić, czy:

  • zero
  • nieokreślony
  • NaN
  • pusty
  • strunowy ("")
  • 0
  • fałszywe
Tony Tai Nguyen
źródło
To nie odpowiada na pytanie, które brzmi: „jak złapać zero i niezdefiniowany?” nie „jak złapać każdą wartość falsey w JavaScript?”
tymczasowego
@Aerovistae, myślałem, że zrobiłem to z console.log (isDeepEqual (null, null)); i console.log (isDeepEqual (undefined, undefined)); ?
Tony Tai Nguyen,
1

Aby sprawdzić, czy zmienna jest pusta lub niezdefiniowana, używam poniższego kodu.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }
DanKodi
źródło
Zamknij, ale nie. Stracić typeofi porównać do undefinedprostych, a nie jako ciąg. Działa to, ale dodatkowy operator nie ma żadnego efektu, ale czyni go bardziej wyrazistym.
tymczasowego
W takim przypadku tak, masz rację, nie musimy używać typeof. Ale dobrą praktyką jest używanie typeof, gdy mamy do czynienia z niezdefiniowanymi zmiennymi. Jednym z powodów użycia typeof jest to, że nie zgłasza błędu, jeśli zmienna nie została zadeklarowana.
DanKodi,
To właściwie zła rzecz. Nie chcesz niezadeklarowanych zmiennych w swoim kodzie. Chcesz, aby wygenerował błąd ReferenceError, abyś mógł znaleźć zmienną i ją zadeklarować. Na pewno nie spróbowałbyś tego w skompilowanym języku, takim jak C ++! To, że pozwala JS, nie oznacza, że ​​należy to zrobić.
tymczasowego
1
Twoje lub oświadczenie jest odwrócone. Sprawdzanie, czy coś jest niezdefiniowane, byłoby pierwszym, a nie drugim krokiem.
Anthony Rutledge
1

Test ten uruchamiam w konsoli Chrome. Używając (void 0) możesz sprawdzić niezdefiniowane:

var c;
undefined
if (c === void 0) alert();
// output =  undefined
var c = 1;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
// check c value  c
// output =  1
if (c === void 0) alert();
// output =  undefined
c = undefined;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
suhail
źródło
1

Spójrzmy na to

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    Powyżej zmienna jest zadeklarowana tylko jako apple. W takim przypadku, jeśli wywołamy metodę alert, wyświetli się niezdefiniowana.

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

W drugim wyświetla null, ponieważ zmienna applewartości ma wartość null.

Możesz więc sprawdzić, czy wartość jest niezdefiniowana, czy pusta.

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}
Anjana Kumari
źródło
0

Najlepszym sposobem:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}
Nishanth Matha
źródło
6
To dokładne rozwiązanie zostało już przewidziane przez @jkindwall dnia paź 11, 2013 stackoverflow.com/a/19323555/2943403 ten kod tylko post jest całkowicie bezużyteczne, ponieważ nie dodaje nową wartość do strony. W rzeczywistości powoduje to powiększenie strony i marnuje czas naukowców na czytanie. Usuń tę odpowiedź.
mickmackusa
0
(null == undefined)  // true

(null === undefined) // false

Ponieważ === sprawdza zarówno typ, jak i wartość. Oba typy są różne, ale wartość jest taka sama.

Franklin Pobożny
źródło
0
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}
KARTHIKEYAN.A
źródło
3
Co się stanie, jeśli użytkownik wpisze słowo „niezdefiniowany”?
Chuck,
Twoje pytanie jest dobre, pokazuje, że warunek jest prawdziwy, dlatego musimy zmienić opcję normalną niezdefiniowaną na typof. @Chuck
KARTHIKEYAN.A
To jest źle. typeofnigdy nie da undefined, tylko ciąg 'undefined'. Co więcej, i == nulljest już prawdą, jeśli tak ijest undefined, więc drugi boolean byłby zbędny, nawet gdyby zadziałał.
tymczasowego
1
To rozwiązanie (z odwróconymi warunkami) zostało już dostarczone przez @jkindwall 11 października 2013 r. Stackoverflow.com/a/19323555/2943403 Ten post tylko do kodu jest całkowicie bezużyteczny, ponieważ nie dodaje żadnej nowej wartości do strony. W rzeczywistości powoduje to powiększenie strony i marnuje czas naukowców na czytanie. Usuń tę odpowiedź.
mickmackusa
0

foo == nullSprawdzenie powinno załatwić sprawę i rozwiązać „niezdefiniowany lub null” przypadek w jak najkrótszym czasie. (Nie biorąc pod uwagę przypadku „foo nie jest zadeklarowany”). Ale ludzie, którzy są przyzwyczajeni do 3 równych (co jest najlepszą praktyką), mogą tego nie zaakceptować. Wystarczy spojrzeć na zasady eqeqeq lub triple-equals w eslint i tslint ...

W tym przypadku należy zastosować jawne podejście, gdy sprawdzamy, czy zmienna jest, undefinedczy nullosobno, a moim wkładem w ten temat (na razie 27 odpowiedzi nie-negatywnych!) Jest użycie void 0zarówno krótkiego, jak i bezpiecznego sposobu przeprowadzania kontroli dla undefined.

Używanie foo === undefinednie jest bezpieczne, ponieważ niezdefiniowane nie jest słowem zarezerwowanym i może być śledzone ( MDN ). Korzystanie z typeof === 'undefined'czeku jest bezpieczne, ale jeśli nie będziemy się przejmować przypadkiem foo-is-undeklarowanym, można zastosować następujące podejście:

if (foo === void 0 || foo === null) { ... }
dilt
źródło
0

jeśli utworzysz funkcję, aby to sprawdzić:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}
Ernesto
źródło
-1

Wywołanie typeof null zwraca wartość „object”, ponieważ wartość specjalna null jest uważana za odwołanie do pustego obiektu. Safari w wersji 5 i Chrome w wersji 7 mają dziwactwo, w którym wywołanie typeof wyrażenia regularnego zwraca „funkcję”, podczas gdy wszystkie inne przeglądarki zwracają „obiekt”.

Jones Agyemang
źródło
-1
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

Możesz użyć tylko drugiego: ponieważ sprawdzi zarówno definicję, jak i deklarację

keshav
źródło
-1

Nadal uważam, że najlepszym / bezpiecznym sposobem przetestowania tych dwóch warunków jest przelanie wartości na ciąg:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}
n1kkou
źródło
czy możesz wyjaśnić, dlaczego uważasz, że jest to „najlepszy / bezpieczny sposób” na przeprowadzenie testów?
sadmicrowave
Ponieważ konwersja zawsze zwraca „znormalizowany” ciąg znaków (tj. [Obiekt Niezdefiniowany]), więc nie masz problemów z testowaniem wartości fałszowania. To tylko moja opinia oparta na doświadczeniach z wartościami prawdy / fałszu.
n1kkou
Dziękuję za wyjaśnienie. Nie krytykuję, to ciekawa odpowiedź, chciałem tylko, abyś wyjaśnił innym, dlaczego jest to potencjalnie lepsze od innych metod.
sadmicrowave
Bez obaw! Miałem wiele problemów z tego rodzaju porównaniami i do tej pory uważam to za najbardziej przydatne podejście w tej kwestii.
n1kkou
-2

Możesz sprawdzić, czy wartość jest niezdefiniowana lub zerowa, po prostu używając typeof:

if(typeof value == 'undefined'){
gideon
źródło
Zobacz komentarze w poprzedniej odpowiedzi ( stackoverflow.com/a/21273362/6305294 ) dotyczące typeof.
Alex
4
To jest niepoprawne. Nie złapać null. Nie rozumiem, dlaczego udzielane są nowe, niepoprawne odpowiedzi na pytanie, na które wiele lat temu udzielono poprawnej i kompletnej odpowiedzi. Czy uważasz, że obecne odpowiedzi są w jakiś sposób niewystarczające?
tymczasowego
-4

if(x==null)jest złym pomysłem w JavaScript. Oceniaj za pomocą "=="- może to spowodować nieoczekiwany przymus typu i nie może być odczytany przez CoffeeScript, nigdy nie używaj „==” lub „! =” W ocenie stanu!

if(x)będzie lepiej, ale uważaj na 0 i „” . Będzie ona traktowana jako fałszywą , a nie z równym metody "!= null"jest prawdą .

Wpisz opis zdjęcia tutaj

Zobacz najlepsze praktyki JavaScript .

Albert.Qing
źródło
3
Jest to całkowicie niepoprawne, a pobieżne badanie jakiegokolwiek profesjonalnego środowiska lub oprogramowania potwierdzi to w ciągu kilku chwil. Korzystanie ==porównać do nulljest standardowy sposób łapania oraz w JS. Przymus typu z nie stanowi ryzyka w tym konkretnym kontekście i jest w rzeczywistości wykorzystywany do osiągnięcia celu złapania zarówno i jednocześnie. Poświęć więcej czasu na pracę z tym językiem, zanim zdecydujesz się zaoferować nieprawidłowe i mylące odpowiedzi na pytania, które zostały zadowalająco rozwiązane lata temu. nullundefined==nullundefined
tymczasowego
unikaj „==”. Wszystko ciągle się zmienia, nie zgadzam się z tobą @Aerovistae
Albert.Qing
3
Nie zgadzasz się ze mną - nie zgadzasz się z całym językiem JavaScript. Wyjaśnijmy się.
tymczasowego