Как определить, является ли переменная "неопределенной" или "нулевой"?

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

25 ответов


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

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

, потому что null == undefined верно, приведенный выше код поймает оба null и undefined.


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

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

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

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

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


изменить опять

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

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


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

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

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

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


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

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

  • null

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

  • Нэн

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

  • 0

  • false


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

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

if (!EmpName) { //do something }

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

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

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

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

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

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

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


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

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

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

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

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


Если вы используете 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;

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

if (object) { Somecode}

то есть

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

элемент проверки jQuery не null

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    //do something
}
else{
    //else do something else
}

лучшим образом:

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

/* do your stuff */
}

с решением ниже:

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...

Я могу проверить следующее:

  • null
  • неопределено
  • Нэн
  • пустой
  • строка ("")
  • 0
  • false

Я запускаю этот тест на консоли chrome, используя (void 0), вы можете проверить undefined

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

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:

if(typeof value == 'undefined'){

(null == undefined)  // true

(null === undefined) // false

потому что === проверяет как тип, так и значение. Типа как разные, но значение одно и то же.


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

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

в некоторых случаях можно изменить значение 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))

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

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

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


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

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


Это очень старый вопрос, но я все еще думаю, что лучший / безопасный способ проверить эти 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
}

if(x==null) плохая идея в javascript, судья с "==" может вызвать непредвиденное принуждение типа и не может быть прочитан coffee-script, никогда не использовать "==" или "!= "в состоянии суда!

if(x) будет лучше.но будьте осторожны!--5-->0 и "", это будет относиться как false,не равный метод с "!= null" is правда.

enter image description here

https://www.w3schools.com/js/js_best_practices.asp


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

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