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


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

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

1569


источник


Ответы:


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

if( value ) {
}

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

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

В приведенном выше списке представлены все возможные 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


3230



// value is undefined or null
return value === undefined || value === null;

JavaScript ninjas мог использовать ==оператор:

return value == null;

143



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

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

undefined  // Because undefined == null

null

[]

""

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

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

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

53



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

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

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

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

Постскриптум нет необходимости строгого равенства в typeof value! = 'undefined'


25



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

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

или

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

25



You may find the following function useful:

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

Or in ES7 (comment if further improvements)

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

"Note that the bind operator (::) is not part of ES2016 (ES7) nor any later edition of the ECMAScript standard at all. It's currently a stage 0 (strawman) proposal for being introduced to the language." – Simon Kjellberg. the author wishes to add his support for this beautiful proposal to receive royal ascension.


23



! check for empty strings (""), null, undefined, false and the number 0 and NaN. Say, if a string is empty var name = "" then console.log(!name) returns true.

function isEmpty(val){
  return !val;
}

this function will return true if val is empty, null, undefined, false, the number 0 or NaN.


16



Here's mine - returns true if value is null, undefined, etc or blank (ie contains only blank spaces):

function stringIsEmpty(value) {

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

}

9



You are a bit overdoing it. To check if a variable is not given a value, you would only need to check against undefined and null.

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

This is assuming 0, "", and objects(even empty object and array) are valid "values".


8



If you prefer plain javascript try this:

  /**
   * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
   * length of `0` and objects with no own enumerable properties are considered
   * "empty".
   *
   * @static
   * @memberOf _
   * @category Objects
   * @param {Array|Object|string} value The value to inspect.
   * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
   * @example
   *
   * _.isEmpty([1, 2, 3]);
   * // => false
   *
   * _.isEmpty([]);
   * // => true
   *
   * _.isEmpty({});
   * // => true
   *
   * _.isEmpty('');
   * // => true
   */

function isEmpty(value) {
    if (!value) {
      return true;
    }
    if (isArray(value) || isString(value)) {
      return !value.length;
    }
    for (var key in value) {
      if (hasOwnProperty.call(value, key)) {
        return false;
      }
    }
    return true;
  }

Otherwise, if you are already using underscore or lodash, try:

_.isEmpty(value)

7



This is a very simple one.

if(data) {
  //Comes inside only if the data is not empty and not null 
}

5



This condition check

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

is all you need.


5