Существует ли стандартная функция для проверки нулевых,неопределенных или пустых переменных в JavaScript

javascript null comparison undefined


Есть ли универсальная функция JavaScript, которая проверяет, что переменная имеет значение и гарантирует, что она не является undefined или null ? У меня есть этот код, но я не уверен, что он охватывает все случаи:

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}



Answer 1 jAndy


Вы можете просто проверить , если переменная имеет truthy значение или нет. Это значит

if( value ) {
}

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

  • null
  • undefined
  • NaN
  • пустая строка ("")
  • 0
  • false

Приведенный выше список представляет все возможные falsy значения в ECMA- / Javascript. Найдите это в спецификации в разделе ToBoolean .

Кроме того, если вы не знаете , существует ли переменная (то есть, если она была объявлена ), вы должны проверить с помощью оператора typeof . Например

if( typeof foo !== 'undefined' ) {
    // foo could get resolved and it's defined
}

Если вы можете быть уверены, что переменная объявлена ​​как минимум, вам следует непосредственно проверить, имеет ли она truthy значение, как показано выше.

Далее читайте: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html




Answer 2 Salman A


Многословный метод проверки,является ли значение неопределенным или нулевым:

return value === undefined || value === null;

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

return value == null; // also returns true if value is undefined



Answer 3 Mike Samuel


function isEmpty(value){
  return (value == null || value.length === 0);
}

Это вернётся к

undefined  // Because undefined == null

null

[]

""

и функции с нулевым аргументом, поскольку length функции - это число объявленных параметров, которые она принимает.

Чтобы запретить последнюю категорию,вы можете просто проверить,нет ли пустых строк.

function isEmpty(value){
  return (value == null || value === '');
}



Answer 4 guya


Это самый безопасный чек,и я не видел,чтобы он размещался здесь именно так:

if (typeof value !== 'undefined' && value) {
    //deal with value'
};

Он будет охватывать случаи, когда значение никогда не определялось, а также любой из них:

  • null
  • неопределенный (значение неопределенного не совпадает с параметром,который никогда не был определен)
  • 0
  • "" (пустая строка)
  • false
  • NaN

Отредактировано: изменено на строгое равенство (! ==), потому что сейчас это норма;)




Answer 5 Vix


Следующая функция может оказаться полезной:

function typeOf(obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}

Или в ES7 (прокомментируйте,если есть дальнейшие улучшения).

function typeOf(obj) {
  const { toString } = Object.prototype;
  const stringified = obj::toString();
  const type = stringified.split(' ')[1].slice(0, -1);

  return type.toLowerCase();
}

Results:

typeOf(); //undefined
typeOf(null); //null
typeOf(NaN); //number
typeOf(5); //number
typeOf({}); //object
typeOf([]); //array
typeOf(''); //string
typeOf(function () {}); //function
typeOf(/a/) //regexp
typeOf(new Date()) //date
typeOf(new WeakMap()) //weakmap
typeOf(new Map()) //map

«Обратите внимание, что оператор связывания (: :) не является ни частью ES2016 (ES7), ни какой-либо более поздней редакцией стандарта ECMAScript вообще. В настоящее время он является предложением стадии 0 (strawman) для введения в язык». - Саймон Кьельберг. Автор хочет добавить свою поддержку этому прекрасному предложению о получении королевского вознесения.