javascript - пустоту - проверка на null js




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

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

Как определить, является ли переменная 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 (variable == null){
    // your code here.
}

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


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

if(typeof value == 'undefined'){

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


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

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

/* do your stuff */
}

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

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

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


С приведенным ниже решением:

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

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

  • ноль
  • не определено
  • NaN
  • пустой
  • string ("")
  • 0
  • ложный

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

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

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

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

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

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

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

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


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

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

if (!EmpName) { //do something }

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

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

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

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

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

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


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

if(x) будет лучше, но будет 0 и «" , это будет считаться ложным , а не равным методом с "!= null" .

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


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

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

  • ноль

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

  • NaN

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

  • 0

  • ложный


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

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

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





undefined