0

我在我的代码中设置了一个具有字符串键的数组,如下所示:

 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字符串。但它不应该返回这个吗?

4

4 回答 4

2

JavaScript 中没有关联数组。您正在做的是将属性“mystring”添加到 a[1] 中的数组。因此,内部计数器“长度”不会增加并且a[1].length == 0为真,因此“isNullValues()”返回真。

您可以使用普通对象“彻底修复”此问题:

var a = new Array();
a[1] = {};
a[1]['mystring'] = 'test';
于 2013-01-08T12:15:02.427 回答
0

试试这个:

 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 Array()new Object()

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

于 2013-01-08T12:16:36.853 回答
0

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

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

只需添加一个名为mystring数组的新属性,其中包含的a[1]含义是:

a[1].length

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

data.length == 0

...导致显示警报。

于 2013-01-08T12:16:54.667 回答
0

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

function isObjectEmpty(obj)
    for(var p in obj) {
        if(obj.hasOwnProperty(p)) return false;
    }
    return true;
}
于 2013-01-08T12:22:28.333 回答