javascript проверка - Как определить, является ли переменная «undefined» или «null»?




пустоту js (21)

if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

Как определить, является ли переменная 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 прекратит выполнение.


Вы можете проверить это методом -

if(['object','undefined'].indexOf(typeof(variable)) != -1){
    console.log("variable is null or undefined.");
}

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

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;

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

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

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

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

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

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

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


var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

Вы можете использовать только второй: поскольку он будет проверять как определение, так и декларацию


В некоторых случаях можно изменить значение undefined . Хотя они обычно редки, иногда бывает лучше избегать фактического использования undefined значения.

В результате, и потому, что быстрее писать, я привык использовать ярлык для undefined который должен смотреть на первое значение пустого массива. Это значение гарантируется как undefined значение примитива, и к нему можно получить доступ с помощью [][0] .

Эта проверка будет работать для поиска как undefined и null .

Вот пример:

(function(undefined){
    var foo = { baz: null };
    console.log(foo.bar === undefined); //false
    console.log(foo.bar == [][0]); //true
    console.log(foo.baz == [][0]); //true
}(50))


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

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

if (!EmpName) { //do something }

Это очень старый вопрос, но я по-прежнему считаю, что лучший / безопасный способ проверить эти 2 условия - передать значение в строку:

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
}

Вы можете проверить, является ли значение неопределенным или нулевым, просто используя typeof:

if(typeof value == 'undefined'){

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

if (object) { Somecode}

т.е.

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

Я пришел написать свою собственную функцию для этого ... 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;
    }

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

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

Рассматривает undefined , null , false , 0 , 0.0 , "0" {} , [] как пустые.

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


var i;

if(i === null || typeof i === 'undefined'){
console.log(i,'i is undefined or null')
}else{
console.log(i,'i has some value')
}

Вызов typeof null возвращает значение «object», поскольку специальное значение null считается пустой ссылкой на объект. Safari через версию 5 и Chrome через версию 7 имеет quirk, где вызов typeof в регулярном выражении возвращает «function», а все остальные браузеры возвращают «объект».


if (typeof EmpName != 'undefined' && EmpName) {

будет оцениваться как true, если значение не указано:

  • ноль

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

  • NaN

  • пустой строки ("")

  • 0

  • ложный


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

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

- который на 100% эквивалентен более явным, но менее кратким:

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

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

Изменить снова

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

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


Я вижу, что исходный пост использовал JQuery. Поэтому я добавляю то, что я использовал в прошлом через JQuery. Обычно, когда я выполняю такую ​​проверку, я не обязательно проверяю, чтобы значение было null или undefined только для этой цели. Больше похоже на «Значение там, поэтому я могу выполнять действия над ним». Поэтому для этого я использую следующее. Я не пробовал каждый тип, но я знаю, что он работает как для null, так и для undefined. Кроме того, объекты и массивы (пустая версия этих объектов вернет true). Кроме того, конечно, если переменная не существует, вы получите исключение, но я честно стараюсь избежать этого любой ценой. Поэтому я согласен с Aerovistae. Я хочу знать об этом в своем коде и не хочу просто пропустить его.

if ($.trim(value) != '') {
   //Do Something
}

Объединив вышеупомянутые ответы, кажется, наиболее полным ответом будет:

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

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


Лучший способ:

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

/* do your stuff */
}

(null == undefined)  // true

(null === undefined) // false

Потому что === проверяет как тип, так и значение. Тип обоих отличается, но значение одно и то же.


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

    if(sVal === '' || sVal === null ||typeof sVal === 'undefined'){
    console.log('variable is undefined or null');
    }

Вместо Null Object Pattern - который имеет свои применения - вы можете рассмотреть ситуации, когда нулевой объект является ошибкой.

Когда выбрано исключение, проверьте трассировку стека и выполните ошибку.





javascript jquery variables null undefined