about something empty:检查jQuery JavaScript isEmpty

Checking something isEmpty in Javascript?

如何检查javascript中的变量是否为空?对不起,这个愚蠢的问题,但我是一个新手在javascript!

1
2
3
4
5
if(response.photo) is empty {
    do something
else {
    do something else
}

response.photo来自json,有时可能是空的,空的数据单元!我想看看它是不是空的。


如果要测试空字符串:

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

如果正在检查已声明但未定义的变量:

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

如果正在检查可能未定义的变量:

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

如果同时检查这两个变量,即变量为空或未定义:

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


这是一个比你想象的更大的问题。变量可以通过很多方式清空。有点取决于你需要知道什么。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 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;
}


这应涵盖所有情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
}

我在上面发布的许多解决方案中看到了潜在的缺点,所以我决定编译自己的解决方案。注意:它使用array.prototype.some,检查您的浏览器支持。

如果以下任一项为真,则下面的解决方案将变量视为空:

  • JS认为变量等于false,已经覆盖了0""[]甚至[""][0]等多个方面。
  • 值为null或类型为'undefined'
  • 它是一个空对象
  • 它是一个对象/数组,只包含本身为空的值(即分解为基元,它的每个部分等于false)。检查递归钻取到对象/数组结构中。例如。

    1
    2
    3
    4
    isEmpty({"": 0}) // true
    isEmpty({"": 1}) // false
    isEmpty([{}, {}])  // true
    isEmpty(["", 0, {0: false}]) //true
  • 功能代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /**
     * 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))
      );
    }


    参见http://underlinejs.org/isEmpty

    isEmpty_uu.isEmpty(对象)如果可枚举对象不包含值(没有可枚举的自身属性),则返回true。对于字符串和类似数组的对象,isEmpty检查长度属性是否为0。


    将@inkednm的答案组合成一个函数:

    1
    2
    3
       function isEmpty(property) {
          return (property === null || property ==="" || typeof property ==="undefined");
       }


    这样做怎么样?

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


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


    这里有一个检查空变量的简单(简短)解决方案。此函数检查变量是否为空。提供的变量可以包含混合值(空、未定义、数组、对象、字符串、整数、函数)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    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


    只需将变量放入if条件中,如果变量有任何值,它将返回true或false。

    1
    2
    3
    4
    5
    6
    7
    if (response.photo){ // if you are checking for string use this if(response.photo =="") condition
     alert("Has Value");
    }
    else
    {
     alert("No Value");
    };


    如果是空数组,我会缺少什么…无键对象…虚假const isEmpty=o=>array.isarray(o)&;!o.join('').length typeof o=='对象'&;&;!对象。键(O)。长度!(+值);


    如果您要查找与php的empty函数等效的函数,请检查:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    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


    1
    if (myVar == undefined)

    将工作以查看var是否已声明但未初始化。


    这取决于你所说的"空"是什么意思。最常见的模式是检查变量是否未定义。许多人还执行空检查,例如:if (myVariable === undefined || myVariable === null)...

    或者,以较短的形式:if (myVariable || myVariable === null)...


    检查是否未定义:

    1
    2
    3
    4
    if (typeof response.photo =="undefined")
    {
        // do something
    }

    这就相当于vb的IsEmpty。如果myvar包含任何值,即使是空值、空字符串或0,它也不是"空"。

    要检查变量或属性是否存在,例如它已声明,尽管它可能尚未定义,但可以使用in运算符。

    1
    2
    3
    4
    if ("photo" in response)
    {
        // do something
    }