我设置了一个数组,其中包含字符串中的键,如下所示:
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
字符串。但它不应该归还吗?
答案 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;
}