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

时间:2013-01-08 12:06:33

标签: javascript

我设置了一个数组,其中包含字符串中的键,如下所示:

 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 个答案:

答案 0 :(得分:2)

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

您可以使用普通对象“脏修复”:

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

答案 1 :(得分: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'}];

答案 2 :(得分:0)

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

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

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

a[1].length

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

data.length == 0

...导致显示警报。

答案 3 :(得分:0)

正如所说,你的第一个问题是使用数组而不是对象。现在,如果要检查对象是否为空(没有键),则必须循环其键:

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