Проверить что-то пустое в Javascript?

86

Как я могу проверить, пуста ли переменная в Javascript? Извините за глупый вопрос, но я новичок в Javascript!

if(response.photo) is empty {
    do something
else {
    do something else
}

response.photoбыл из JSON, и иногда он мог быть пустым, пустыми ячейками данных! Я хочу проверить, пусто ли оно.

Джон Вудврик
источник
2
Что здесь означает «пустой»? Если вы не уверены, покажите нам код.
thejh 04
1
Вы имеете в виду, если он еще не инициализирован?
Franz Payer
1
Вы имеете в виду, оценивает ли это false?
Felix Kling
2
Вы имеете в виду, если это пустая строка?
Марк Байерс
Вот реализация функции PHPs в JavaScript empty()в более удобном для чтения виде. stackoverflow.com/a/33319704/3779853
phil294

Ответы:

135

Если вы проверяете пустую строку:

if(myVar === ''){ // do stuff };

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

if(myVar === null){ // do stuff };

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

if(myVar === undefined){ // do stuff };

Если вы проверяете оба значения, то есть любая переменная имеет значение null или undefined:

if(myVar == null){ // do stuff };
Brettkelly
источник
4
Не используйте undefined«константу», так как это вообще не константа. typeof myVar === 'undefined'Вместо этого используйте .
Guffa
4
Нет. Если переменная была объявлена, но не определена, она не равна нулю ... она не определена. Если вы проверите переменную, которая не была объявлена, вы получите ошибку времени выполнения. Также var undefined = 1;сломаю ваш третий пример. Всегда используйте typeofи проверяйте "undefined".
gilly3 04
@Jhon Woodwrick: Это будет первый случай, пустая строка.
thejh 04
2
if(typeof variable === "undefined")
ncubica
Спасибо за помощь
phani
53

Это более серьезный вопрос, чем вы думаете. Переменные могут опустошаться разными способами. Типа зависит от того, что вам нужно знать.

// quick and dirty will be true for '', null, undefined, 0, NaN and false.
if (!x) 

// test for null OR undefined
if (x == null)  

// test for undefined OR null 
if (x == undefined) 

// test for undefined
if (x === undefined) 
// or safer test for undefined since the variable undefined can be set causing tests against it to fail.
if (typeof x == 'undefined') 

// test for empty string
if (x === '') 

// if you know its an array
if (x.length == 0)  
// or
if (!x.length)

// BONUS test for empty object
var empty = true, fld;
for (fld in x) {
  empty = false;
  break;
}
Болиголов
источник
@Tomalak Ой, спасибо. Я думаю, что тройное равенство необязательно. Тип вернет строку, ничего не будет принудительно.
Hemlock
Это правда. В любом случае проверка личности не помешает. :-)
Tomalak
1
(! x) также будет верно для NaN и []. (x == null) - это проверка на null или undefined.
Патрик Фишер,
1
Да, я забыл про NaN. Я не понимал, что тест на null работает так же, как тест на undefined. !xневерно для пустого массива.
Hemlock
11

Это должно охватывать все случаи:

function empty( val ) {

    // test results
    //---------------
    // []        true, empty array
    // {}        true, empty object
    // null      true
    // undefined true
    // ""        true, empty string
    // ''        true, empty string
    // 0         false, number
    // true      false, boolean
    // false     false, boolean
    // Date      false
    // function  false

        if (val === undefined)
        return true;

    if (typeof (val) == 'function' || typeof (val) == 'number' || typeof (val) == 'boolean' || Object.prototype.toString.call(val) === '[object Date]')
        return false;

    if (val == null || val.length === 0)        // null or 0 length array
        return true;

    if (typeof (val) == "object") {
        // empty object

        var r = true;

        for (var f in val)
            r = false;

        return r;
    }

    return false;
}
щенок плутона
источник
5

Я вижу потенциальные недостатки многих решений, опубликованных выше, поэтому решил скомпилировать собственное.
Примечание: он использует Array.prototype.some , проверьте поддержку вашего браузера.

В приведенном ниже решении переменная считается пустой, если верно одно из следующих условий:

  1. JS считает , что переменная равна false, которая уже охватывает многие вещи , как 0, "", [], и даже [""]и[0]
  2. Значение nullили тип'undefined'
  3. Это пустой объект
  4. Это объект / массив, состоящий только из значений, которые сами по себе пусты (т.е. разбиты на примитивы, каждая из которых равна false). Проверки рекурсивно переходят в структуру объекта / массива. Например

    isEmpty({"": 0}) // true
    isEmpty({"": 1}) // false
    isEmpty([{}, {}])  // true
    isEmpty(["", 0, {0: false}]) //true
    

Код функции:

/**
 * Checks if value is empty. Deep-checks arrays and objects
 * Note: isEmpty([]) == true, isEmpty({}) == true, isEmpty([{0:false},"",0]) == true, isEmpty({0:1}) == false
 * @param value
 * @returns {boolean}
 */
function isEmpty(value){
  var isEmptyObject = function(a) {
    if (typeof a.length === 'undefined') { // it's an Object, not an Array
      var hasNonempty = Object.keys(a).some(function nonEmpty(element){
        return !isEmpty(a[element]);
      });
      return hasNonempty ? false : isEmptyObject(Object.keys(a));
    }

    return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks
      return !isEmpty(element); // at least one element should be non-empty
    });
  };
  return (
    value == false
    || typeof value === 'undefined'
    || value == null
    || (typeof value === 'object' && isEmptyObject(value))
  );
}
Алексей Чекулаев
источник
Ницца. Вы также можете указать на различия и то, как он устраняет выявленные вами недостатки.
Шон Механ
1
Здесь мне нужно будет повторить все решения. Хорошо. По сравнению с функциями @victorkohl и @kapa мои могут идти глубже, чем первый уровень, и сообщать о сложных объектах, которые выглядят непустыми, но на самом деле состоят только из пустых значений. Пример: [{},0,""]. Все остальные решения здесь - это просто двухстрочные, которые не идут на расстояние, и функция подчеркивания, которая работает для объектов и требует библиотеки.
Алексей Чекулаев
4

Вот мое самое простое решение.

На основе функции PHP empty

function empty(n){
	return !(!!n ? typeof n === 'object' ? Array.isArray(n) ? !!n.length : !!Object.keys(n).length : true : false);
}

//with number
console.log(empty(0));        //true
console.log(empty(10));       //false

//with object
console.log(empty({}));       //true
console.log(empty({a:'a'}));  //false

//with array
console.log(empty([]));       //true
console.log(empty([1,2]));    //false

//with string
console.log(empty(''));       //true
console.log(empty('a'));      //false

Прабу самвел
источник
3

См. Http://underscorejs.org/#isEmpty

isEmpty_.isEmpty (object) Возвращает истину, если перечисляемый объект не содержит значений (нет перечисляемых собственных свойств). Для строк и объектов, подобных массиву, _.isEmpty проверяет, равно ли значение свойства length 0.

Ло ХаБуйшань
источник
3

Объединение ответов от @inkednm в одну функцию:

   function isEmpty(property) {
      return (property === null || property === "" || typeof property === "undefined");
   }
Crashalot
источник
Используйте property == nullдля комбинированной проверки nullиundefined
SJ00
3

Пустая проверка ключа JSON зависит от варианта использования. Для распространенного варианта использования мы можем проверить следующее:

  1. Не null
  2. Не undefined
  3. Не пустая строка ''
  4. Не пустой объект {} [] (массив - это объект)

Функция:

function isEmpty(arg){
  return (
    arg == null || // Check for null or undefined
    arg.length === 0 || // Check for empty String (Bonus check for empty Array)
    (typeof arg === 'object' && Object.keys(arg).length === 0) // Check for empty Object or Array
  );
}

Вернуть верно для:

isEmpty(''); // Empty String
isEmpty(null); // null
isEmpty(); // undefined
isEmpty({}); // Empty Object
isEmpty([]); // Empty Array
SJ00
источник
2

просто поместите переменную в условие if, если переменная имеет какое-либо значение, она вернет true, иначе false.

if (response.photo){ // if you are checking for string use this if(response.photo == "") condition
 alert("Has Value");
}
else
{
 alert("No Value");
};
Дипак М.С.
источник
Предполагается, что «пустой» означает ноль ... но из вопроса задающего вопрос не ясно, что они имели в виду. Вероятно, лучше сначала уточнить это, прежде чем предлагать ответ, или, по крайней мере, сформулировать это как предположение в своем ответе.
Мир
1

А как насчет этого?

JSON.stringify({}) === "{}"

Тибин Томас
источник
0

Это зависит от того, что вы подразумеваете под «пустым». Наиболее распространенная схема, чтобы проверить , чтобы увидеть , если переменная не определена . Многие люди также выполняют нулевую проверку, например:
if (myVariable === undefined || myVariable === null)...

или, в более короткой форме:
if (myVariable || myVariable === null)...

Бобби Д
источник
Не используйте undefined«константу», так как это вообще не константа. typeof myVar === 'undefined'Вместо этого используйте .
Guffa
Эти две формы совсем не одно и то же.
kapa
Верно, что существует неопределенный тип, но, если процитировать стандарт: Ссылка - это разрешенная привязка имени. Ссылка состоит из трех компонентов: базового значения, имени ссылки и флага строгой ссылки с логическим значением. Базовым значением является либо неопределенное значение, либо объект, либо логическое значение, либо строка, либо число, либо запись среды (10.2.1). Базовое значение undefined указывает, что ссылка не может быть разрешена в привязку.
Bobby D
0
if (myVar == undefined)

будет работать, чтобы увидеть, объявлен ли var, но не инициализирован.

Франц Пайер
источник
1
Это опасно, поскольку undefinedможет быть переопределено в коде (т.е. undefined = trueдействительно).
Tomalak
Не используйте undefined«константу», так как это вообще не константа. typeof myVar === 'undefined'Вместо этого используйте .
Guffa
0

Проверить на неопределенное:

if (typeof response.photo == "undefined")
{
    // do something
}

Это будет эквивалент vb IsEmpty. Если myvar содержит какое-либо значение, даже null, пустую строку или 0, оно не является «пустым».

Чтобы проверить, существует ли переменная или свойство, например, они были объявлены, хотя, возможно, не были определены, вы можете использовать inоператор.

if ("photo" in response)
{
    // do something
}
гилли3
источник
0

Если вы ищете эквивалент функции PHP empty, обратите внимание на это:

function empty(mixed_var) {
  //   example 1: empty(null);
  //   returns 1: true
  //   example 2: empty(undefined);
  //   returns 2: true
  //   example 3: empty([]);
  //   returns 3: true
  //   example 4: empty({});
  //   returns 4: true
  //   example 5: empty({'aFunc' : function () { alert('humpty'); } });
  //   returns 5: false

  var undef, key, i, len;
  var emptyValues = [undef, null, false, 0, '', '0'];

  for (i = 0, len = emptyValues.length; i < len; i++) {
    if (mixed_var === emptyValues[i]) {
      return true;
    }
  }

  if (typeof mixed_var === 'object') {
    for (key in mixed_var) {
      // TODO: should we check for own properties only?
      //if (mixed_var.hasOwnProperty(key)) {
      return false;
      //}
    }
    return true;
  }

  return false;
}

http://phpjs.org/functions/empty:392

капа
источник
0

что мне не хватает, если пустой массив ... объект без ключа ... ложность const isEmpty = o => Array.isArray (o) &&! o.join (''). length || typeof o === 'object' &&! Object.keys (o) .length || ! (+ значение);

КПК
источник
0

Вот более простое (короткое) решение для проверки пустых переменных. Эта функция проверяет, пуста ли переменная. Предоставленная переменная может содержать смешанные значения (null, undefined, массив, объект, строка, целое число, функция).

function empty(mixed_var) {
 if (!mixed_var || mixed_var == '0') {
  return true;
 }
 if (typeof mixed_var == 'object') {
  for (var k in mixed_var) {
   return false;
  }
  return true;
 }
 return false;
}

//   example 1: empty(null);
//   returns 1: true

//   example 2: empty(undefined);
//   returns 2: true

//   example 3: empty([]);
//   returns 3: true

//   example 4: empty({});
//   returns 4: true

//   example 5: empty(0);
//   returns 5: true

//   example 6: empty('0');
//   returns 6: true

//   example 7: empty(function(){});
//   returns 7: false
Дж. Каррильо
источник
Странно ... Я еще не видел, чтобы это решение было размещено в Интернете, но использование символа "!" должен позаботиться о проверке большинства значений
J Carrillo
0

const isEmpty = val => val == null || !(Object.keys(val) || val).length;

Исмаэль Олива
источник
Я не понимаю, пользователь спросил, как проверить пустоту в javascript, поэтому я предполагаю, что пользователь знает javascript, нет необходимости объяснять мой ответ, если известен синтаксис?
ismael oliva
Будет лучше, если добавить еще несколько слов описания (: Может быть, другие люди тоже захотят понять.
RTMY,
0

function isEmpty(variable) {
  const type = typeof variable
  if (variable === null) return true
  if (type === 'undefined') return true
  if (type === 'boolean') return false
  if (type === 'string') return !variable
  if (type === 'number') return false
  if (Array.isArray(variable)) return !variable.length
  if (type === 'object') return !Object.keys(variable).length
  return !variable
}

Зиарно
источник