不是`.length`是在Javascript中检查数组是否为空的正确方法吗?

时间:2016-12-21 14:05:32

标签: javascript jquery

我有以下AJAX调用:

var lineChars = new char[] { '\r', '\n' };
var nextLineIndex = input.IndexOfAny(lineChars, 0, 70);

后端的upload方法返回如下的JSON:

$('#fileupload').show().fileupload({
    url: '/upload',
    type: "POST",
    cache: false,
    dataType: 'json',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    done: function (e, data) {
        var error_msg = $("#load_error_msg");

        error_msg.html('');

        if (data.result.error.length > 0) {
            // process errors messages here 
        } else {
            // do something else
        }
    },
})

代码绕过此检查{ "error": { "fileUploadErrorIniSize": "File '' exceeds the defined ini size" } } 并始终通过data.result.error.length条件。

此时我很困惑:在Javascript中检查数组是否为空是不正确的else?如果不是正确的方式呢?

1 个答案:

答案 0 :(得分:4)

它不是一个数组,它是一个普通的对象。普通对象默认不具有length属性。

您可以使用Object.keys(data.result.error).length查看它是否具有您的示例所拥有的任何自己的可枚举属性。

,假设data.result确实指向该数据结构,那么:

if (Object.keys(data.result.error).length > 0) {

如果data.result根本没有error财产的可能性,那么您应该防范:

if (data.result.error && Object.keys(data.result.error).length > 0) {

但如果你知道它总是在那里(有时候是空的),那就没有必要了。

相关问题