我想知道如何在jQuery中检查数组是空还是null。我试过了array.length === 0
,但它没有用。它也没有抛出任何错误。
这是代码:
var album_text = new Array();
$("input[name='album_text[]']").each(function(){
if( $(this).val() && $(this).val() != '') {
album_text.push($(this).val());
}
});
if (album_text.length === 0) {
$('#error_message').html("Error");
}
else {
// send data
}
答案 0 :(得分:141)
只要您的选择器实际工作,我发现检查数组长度的代码没有任何问题。那应该做你想要的。清理代码有很多方法可以更简单,更易读。这是一个清理版本,附有关于我清理的内容的说明。
var album_text = [];
$("input[name='album_text[]']").each(function() {
var value = $(this).val();
if (value) {
album_text.push(value);
}
});
if (album_text.length === 0) {
$('#error_message').html("Error");
}
else {
//send data
}
关于你在做什么以及我改变了什么的一些注意事项。
$(this)
始终是有效的jQuery对象,因此没有理由检查if ($(this))
。它内部可能没有任何DOM对象,但如果需要,可以使用$(this).length
检查,但是这里没有必要,因为如果没有项目,.each()
循环将不会运行$(this)
循环中的.each()
始终是一个东西。[]
而不是new Array()
初始化数组。if (value)
当值预计为字符串时,将同时保护value == null
,value == undefined
和value == ""
,因此您无需执行if (value && (value != ""))
。你可以这样做:if (value)
检查所有三个空条件。if (album_text.length === 0)
会告诉您数组是否为空,只要它是一个有效的初始化数组(它就在这里)。您要对此选择器$("input[name='album_text[]']")
做什么?
答案 1 :(得分:65)
User JQuery是EmptyObject,用于检查数组是否包含元素。
var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true
答案 2 :(得分:7)
在推入阵列之前,您应该检查''
(空字符串)。您的数组包含空字符串元素。那么你的album_text.length === 0
就可以了。
答案 3 :(得分:7)
我认为使用来自jquery的$ .isEmptyObject检查数组是否为空是危险的,如@jesenko所述。我刚刚遇到了这个问题。
在isEmptyObject doc中,它提到:
参数应始终是纯JavaScript对象
您可以$.isPlainObject
确定。 $.isPlainObject([])
的返回是错误的。