Как определить, является ли переменная «неопределенной» или «нулевой»? - PullRequest
1871 голосов
/ 15 апреля 2010

Как определить, является ли переменная undefined или null? Мой код выглядит следующим образом:

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

Но если я сделаю это, интерпретатор JavaScript остановит выполнение.

Ответы [ 23 ]

2566 голосов
/ 15 апреля 2010

Вы можете использовать качества оператора абстрактного равенства , чтобы сделать это:

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

Поскольку null == undefined имеет значение true, приведенный выше код будет обрабатывать null и undefined.

1035 голосов
/ 22 января 2014

Стандартный способ поймать null и undefined одновременно таков:

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

- что на 100% эквивалентно более явному, но менее лаконичному:

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

При написании профессиональных JS считается само собой разумеющимся, что равенство типов и поведение == против === понятны. Поэтому мы используем == и сравниваем только с null.


Изменить еще раз

Комментарии, предлагающие использовать typeof, просто неверны. Да, мое решение выше вызовет ReferenceError, если переменная не существует. Это хорошая вещь. Эта ReferenceError желательна: она поможет вам найти свои ошибки и исправить их до того, как вы отправите свой код, точно так же, как ошибки компилятора в других языках.

В вашем коде не должно быть ссылок на необъявленные переменные.

193 голосов
/ 11 октября 2013

Сочетая вышеприведенные ответы, кажется, наиболее полный ответ будет:

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

Это должно работать для любой переменной, которая либо необъявлена, либо объявлена, и ей явно задано значение null или undefined. Логическое выражение должно иметь значение false для любой объявленной переменной, которая имеет фактическое ненулевое значение.

182 голосов
/ 15 апреля 2010
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
83 голосов
/ 07 мая 2015
if (typeof EmpName != 'undefined' && EmpName) {

будет иметь значение true, если значение не равно:

  • Нулевой

  • неопределенный

  • NaN

  • пустая строка ("")

  • 0

  • ложь

22 голосов
/ 15 апреля 2010
Функция

jQuery attr() возвращает либо пустую строку, либо фактическое значение (и никогда null или undefined). Единственный раз, когда он возвращает undefined, это когда ваш селектор не вернул ни одного элемента.

Так что вы можете проверить на пустую строку. В качестве альтернативы, поскольку пустые строки, null и undefined имеют значение false-y, вы можете просто сделать это:

if (!EmpName) { //do something }
12 голосов
/ 24 октября 2015

Я пришел написать свою собственную функцию для этого. JavaScript странный

Используется буквально на чем угодно. (Обратите внимание, что это также проверяет, содержит ли переменная какие-либо используемые значения . Но так как эта информация обычно также необходима, я думаю, что это стоит опубликовать). Пожалуйста, рассмотрите возможность оставить записку.

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;
}

Машинопись-совместимый.


Редактировать. эта функция должна делать точно то же самое, что и PHP empty() функция (см. RETURN VALUES)

Считает undefined, null, false, 0, 0.0, "0" {}, [] пустыми.

"0.0", NaN, " ", true считаются непустыми.

9 голосов
/ 10 февраля 2014

Если переменная, которую вы хотите проверить, является глобальной, выполните

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

Этот способ проверки не выдаст ошибку, даже если переменная yourVarName не существует.

Пример: я хочу знать, поддерживает ли мой браузер History API

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

Как это работает:

window - это объект, который содержит все глобальные переменные в качестве своих свойств, и в JavaScript допустимо пытаться получить доступ к несуществующему свойству объекта. Если history не существует, то window.history возвращает undefined. undefined неверно, поэтому код в блоке if(undefined){} не будет выполняться.

6 голосов
/ 08 июля 2014

Поскольку вы используете jQuery , вы можете определить, является ли переменная неопределенной или ее значение равно нулю, используя одну функцию.

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;
5 голосов
/ 15 октября 2013

У меня только что была эта проблема, то есть проверка, является ли объект нулевым.
Я просто использую это:

if (object) {
    // Your code
}

Например:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}
...