如果键是字符串,数组显示为空

Array showing empty if key is string?

本文关键字:显示 数组 字符串 如果      更新时间:2023-09-26

我在我的代码中设置了一个数组,其中key为string:

 var a = new Array();
 a[1] = new Array();
 a[1]['mystring'] = new Array();
 a[1]['mystring'] = 'test';
 if(isNullValues(a[1])) {
    alert("Array Empty.");
 }
 function isNullValues(data) {
    if (data == undefined || data == null || data.length == 0 || data == "") {
        return true;
     } else {
           return false;
     } 
  }

它提醒我Array Empty字符串。但它不应该返回这个?

JavaScript中没有关联数组。你所做的是添加一个属性"mystring"的数组在a[1]。因此,内部计数器"length"不会增加,a[1].length == 0为真,因此"isNullValues()"返回真。

你可以通过使用一个普通对象来"脏修复"这个问题:

var a = new Array();
a[1] = {};
a[1]['mystring'] = 'test';

试试这个:

 var a = new Array();
 a[1] = new Object();
 a[1]['mystring'] = 'test';
 if(isNullValues(a[1])) {
    alert("Array Empty.");
 }
 function isNullValues(data) {
    if (data == undefined || data == null || data.length == 0 || data == "") {
        return true;
     } else {
           return false;
     } 
  }

我在new Object()中改变了new Array()

您也可以将a写成var a = [undefined, {mystring: 'test'}];

所示的代码确实应该显示警报,因为:

a[1]['mystring'] = new Array();

简单地向a[1]中包含的数组添加一个名为mystring的新属性,这意味着:

a[1].length

…仍然是0,因为没有元素被添加到实际数组中。对于数组中的0个元素,isNullValues函数返回true,因为检查:

data.length == 0

如前所述,您的第一个问题是使用数组而不是对象。现在,如果你想检查一个对象是否为空(没有键),你必须循环它的键:

function isObjectEmpty(obj)
    for(var p in obj) {
        if(obj.hasOwnProperty(p)) return false;
    }
    return true;
}