Jak określić, czy zmienna jest undefined lub null?

Mój kod wygląda następująco:

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ę, tłumacza JavaScript zatrzymuje wykonanie.

2368
sadmicrowave 15 kwiecień 2010, 22:12

26 odpowiedzi

Najlepsza odpowiedź

Możesz użyć właściwości Abstract Equality Operator do tego:

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

Ponieważ null == undefined jest prawdziwe, powyższy kod złapie zarówno null i undefined.

3034
temporary_user_name 20 lipiec 2017, 20:11

Standardowy sposób na złapanie null i undefined jest to:

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

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

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

Podczas pisania Professional JS jest to zabrane za pewnik, że Równość typu i zachowanie == vs === jest rozumiany. Dlatego używamy == i porównaj się tylko do null.


znowu edytuj

Uwagi sugerujące użycie typeof są po prostu zły . tak, moje rozwiązanie powyżej spowoduje, że zmienna nie istnieje. To jest dobra rzecz. Ten referenceEkreError jest pożądany: pomoże Ci znaleźć swoje błędy i naprawić je przed wysłaniem kodu, podobnie jak błędy kompilatora w innych językach. Użyj try / catch Jeśli pracujesz z wejściem, nie masz kontroli nad.

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

1159
temporary_user_name 20 grudzień 2019, 03:24

Łącząc powyższe odpowiedzi, wydaje się najbardziej pełną odpowiedzią:

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

Powinno to działać dla każdej zmiennej, która jest nieodłączona lub zadeklarowana i wyraźnie ustawiona na null lub niezdefiniowany. Wyrażenie boolowskie powinno oceniać false na każdą deklarowaną zmienną, która ma rzeczywistą wartość null.

246
vsync 9 luty 2015, 10:47
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
189
knocte 26 grudzień 2013, 14:18

Funkcja jQuery {X0}} zwraca pusty ciąg lub rzeczywistą wartość (i nigdy null lub undefined). Jedynym czasem powraca undefined jest wtedy, gdy selektor nie zwrócił żadnego elementu.

Więc możesz przetestować na pustym ciągu. Alternatywnie, ponieważ puste sznurki, null i niezdefiniowane są fałszywe y, możesz po prostu to zrobić:

if (!EmpName) { //do something }
29
Chetan S 15 kwiecień 2010, 18:20

Prawdopodobnie najkrótszy sposób na to:

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

Oto dowód:

function check(EmpName) {
  if(EmpName == null) { return true; };
  return false;
}

var log = (t,a) => console.log(`${t} -> ${check(a)}`);

log('null', null);
log('undefined', undefined);
log('NaN', NaN);
log('""', "");
log('{}', {});
log('[]', []);
log('[1]', [1]);
log('[0]', [0]);
log('[[]]', [[]]);
log('true', true);
log('false', false);
log('"true"', "true");
log('"false"', "false");
log('Infinity', Infinity);
log('-Infinity', -Infinity);
log('1', 1);
log('0', 0);
log('-1', -1);
log('"1"', "1");
log('"0"', "0");
log('"-1"', "-1");

// "void 0" case
console.log('---\n"true" is:', true);
console.log('"void 0" is:', void 0);
log(void 0,void 0); // "void 0" is "undefined" 

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

Enter image description here

bonus : Powód, dlaczego === jest bardziej jasny niż ==

Enter image description here

26
Kamil Kiełczewski 11 maj 2020, 08:21

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

Jest użyteczny dosłownie wszystko. (Należy również sprawdzić, czy zmienna zawiera dowolne wartości użyteczne . Ale ponieważ informacje te są zazwyczaj potrzebne, myślę, że warto opublikować). Rozważ 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 maszynami.


Ta funkcja powinna zrobić dokładnie to samo, jak {{x0 }} Funkcja (patrz RETURN VALUES)

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

"0.0", NaN, " ", true są uważane za puste.

21
Peter Mortensen 8 marzec 2020, 23:19

Najkrótsze i najłatwiejsze:

if(!EmpName ){
 // DO SOMETHING
}

Będzie to ocenione, jeśli Empname jest:

  • zero
  • nieokreślony
  • Nan.
  • pusty
  • strunowy ("")
  • 0
  • fałszywy
19
Artog 15 sierpień 2019, 11:58

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

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

W ten sposób sprawdzenie nie spowoduje błędu, nawet jeśli zmienna yourVarName nie istnieje.

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

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

Jak to działa:

window jest obiektem, który posiada wszystkie zmienne globalne jako jego właściwości, aw JavaScript jest legalny, aby uzyskać dostęp do nieistniejącego właściwości obiektu. Jeśli history nie istnieje, wtedy window.history zwraca undefined. undefined jest fałszywym, więc kod w bloku if(undefined){} nie uruchomi się.

13
Mark Amery 5 luty 2015, 20:37

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 === ''){
}
11
Hardik Desai 1 lipiec 2020, 07:38

Ponieważ używasz jQuery , możesz określić, czy zmienna jest niezdefiniowana, albo jego wartość jest null, 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;
9
Warren Sergent 6 maj 2016, 00:14

Właśnie miałem ten problem, który sprawdza, czy obiekt jest null.
Po prostu używam tego:

if (object) {
    // Your code
}

Na przykład:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}
9
Richie Bendall 19 maj 2019, 03:34

Element czekowy jQuery nie jest null:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}
6
Peter Mortensen 8 marzec 2020, 23:17

Najłatwiejszym sposobem sprawdzenia jest:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}
4
Cody Gray 28 maj 2019, 06:57

if(x==null) to zły pomysł w JavaScript. Sędzia z "==" - Może to spowodować nieoczekiwany przymusu typu i nie można go odczytać przez coffeescript, Nigdy nie używaj "==" lub "! =" W warunku oceny!

if(x) będzie lepszy, ale bądź ostrożny za pomocą 0 i "" . Będzie traktowany jako false , a nie o równej metodzie z "!= null" jest true .

Enter image description here

Zobacz JavaScript Najlepsze praktyki .

-4
Peter Mortensen 8 marzec 2020, 23:26

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ć:

  • zero
  • nieokreślony
  • Nan.
  • pusty
  • strunowy ("")
  • 0
  • fałszywy
3
Tony Tai Nguyen 12 grudzień 2017, 10:29

Aby sprawdzić, czy zmienna ma wartość NULL lub nieokreślona, używam poniższego kodu.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }
2
DanKodi 19 wrzesień 2019, 23:58

Sprawdzanie foo == null powinien wykonać sztuczkę i rozwiązywać obudowę "niezdefiniowaną lub null" w najkrótszym sposób. (Nie rozważanie "Foo nie jest zadeklarowany" sprawa.) Ale ludzie, którzy służą do 3 równych (jak najlepsza praktyka) może tego nie zaakceptować. Wystarczy spojrzeć na EQEQEQ lub Triple-Rówolony reguły w EsLint i Tslint ...

Jawne podejście, kiedy sprawdzamy, czy zmienna jest undefined lub null oddzielnie należy zastosować w tym przypadku, a mój wkład na ten temat (na razie 27 odpowiedzi nie-negatywnych!) Użyj void 0, ponieważ zarówno krótki, jak i bezpieczny sposób wykonania czeku dla undefined.

Używanie foo === undefined nie jest bezpieczne, ponieważ nieokreślony nie jest słowem zastrzeżonym i może być cieniowany (MDN). Korzystanie z czeku typeof === 'undefined' jest bezpieczne, ale jeśli nie będziemy dbać o foo-is-niezarejestrowany przypadek, można użyć następującego podejścia:

if (foo === void 0 || foo === null) { ... }
2
dhilt 16 marzec 2020, 23:27
(null == undefined)  // true

(null === undefined) // false

Ponieważ === sprawdza zarówno rodzaj i wartość. Rodzaj obu są różne, ale wartość jest taka sama.

1
Franklin Pious 27 maj 2018, 11:19
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}
0
Peter Mortensen 8 marzec 2020, 23:22

Wywołanie TypeOf Null Zwraca wartość "Obiekt", ponieważ wartość Null Special Warto jest uważany za pusty odniesienie do obiektu. Safari poprzez wersję 5 i Chrome przez wersję 7 mają dziwaczny, w którym wywołanie TypeOf na wyrażeniu regularnym zwraca "Funkcja", podczas gdy wszystkie inne przeglądarki zwracają "obiekt".

-1
Jones Agyemang 6 marzec 2014, 11:24
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ę

-1
Karthikeyan Vaithilingam 15 sierpień 2015, 10:07

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

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
}
-1
Peter Mortensen 8 marzec 2020, 23:23

Możesz sprawdzić, czy wartość jest niezdefiniowana lub null, po prostu za pomocą TypeOf:

if(typeof value == 'undefined'){
-3
gideon 26 lipiec 2017, 02:16

Możesz po prostu korzystać z poniższych (wiem, że są krótsze sposoby, aby to zrobić, ale może to ułatwić wizualnie obserwować, przynajmniej dla innych patrząc na kod).

if (x === null || x === undefined) {
 // Add your response code here, etc.

}

7
Kamil Kiełczewski 11 maj 2020, 08:22

Uruchomiłem ten test w konsoli Chrome. Korzystanie (void 0) Możesz sprawdzić niezdefiniowany:

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
2
Peter Mortensen 8 marzec 2020, 23:21