Существует ли стандартная функция для проверки нулевых, неопределенных или пустых переменных в JavaScript? - PullRequest
1942 голосов
/ 01 апреля 2011

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

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

Ответы [ 29 ]

3849 голосов
/ 01 апреля 2011

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

if( value ) {
}

будет оцениваться в true, если value равно , а не :

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

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

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

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

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

Подробнее читайте: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html

190 голосов
/ 01 апреля 2011

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

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

Вы также можете использовать оператор ==, но это предполагает, что один из них знает все правила :

return value == null; // also returns true if value is undefined
71 голосов
/ 01 апреля 2011
function isEmpty(value){
  return (value == null || value.length === 0);
}

Это вернет true для

undefined  // Because undefined == null

null

[]

""

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

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

function isEmpty(value){
  return (value == null || value === '');
}
31 голосов
/ 10 ноября 2013

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

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

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

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

PS Нет необходимости в строгом равенстве typeof value! = 'undefined'

27 голосов
/ 12 февраля 2015

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

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();
}

Результаты:

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) для введения в язык ».- Саймон Кьельберг.Автор желает добавить свою поддержку этому прекрасному предложению о получении королевского вознесения.

25 голосов
/ 19 марта 2014

Первый ответ с лучшим рейтингом неверен.Если значение не определено, оно выдаст исключение в современных браузерах.Вы должны использовать:

if (typeof(value) !== "undefined" && value)

или

if (typeof value  !== "undefined" && value)
19 голосов
/ 23 января 2015

! проверка для пустых строк (""), нулевых, неопределенных, ложных и числа 0 и NaN. Скажите, если строка пуста var name = "", тогда console.log(!name) возвращает true.

function isEmpty(val){
  return !val;
}

эта функция вернет true, если val равно пусто, null, undefined, false, число 0 или NaN .

ИЛИ

В зависимости от вашей проблемной области вы можете просто использовать как !val или !!val.

12 голосов
/ 01 апреля 2011

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

function isEmpty(value){
    return (typeof value === "undefined" || value === null);
}

Это предполагает 0, "" и объекты (даже пустой объект и массив) являются действительными "значениями".

10 голосов
/ 02 мая 2015

Это условие проверки

if (!!foo) {
    //foo is defined
}

- это все, что вам нужно.

9 голосов
/ 12 февраля 2014

Вот мое - возвращает true, если значение равно нулю, неопределено и т. Д. Или пусто (т. Е. Содержит только пробелы):

function stringIsEmpty(value) {

    return value ? value.trim().length == 0 : true;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...