含键值对的JS对象判断为空时length返回undefined的问题
解决JS对象判断为空时
length返回undefined的问题 嘿,我完全懂你的困扰!你一开始想创建键值对结构,但不小心混淆了JS对象和数组的用法——数组才有length属性,而你用var a = {}创建的是普通对象,所以a.length自然会返回undefined。不过别担心,你的对象用法其实是对的(键值对用对象比数组更合适),只要换个方式判断对象是否为空就行。
几种判断JS对象是否为空的实用方法:
方法1:用
Object.keys()(原生JS,推荐)
这个方法会返回对象所有可枚举属性的键组成的数组,我们只需要检查这个数组的长度是否为0:var a = {}; $('#individual_users_result').find("li").each(function() { var added_domains = $(this).attr('data-id'); var added_domains_text = $(this).text().trim(); a[added_domains] = added_domains_text; }); // 判断对象是否为空 if (Object.keys(a).length === 0) { console.log("对象是空的"); } else { console.log("对象包含内容"); }方法2:用jQuery内置方法(适合你的场景)
既然你已经在用jQuery,直接用$.isEmptyObject()方法更省心,它专门用来判断空对象:if ($.isEmptyObject(a)) { console.log("对象是空的"); }方法3:手动遍历属性(兼容性更好,适合旧环境)
用for...in循环遍历对象,结合hasOwnProperty确保只检查自身属性:function isEmptyObj(obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) { return false; } } return true; } // 使用方法 if (isEmptyObj(a)) { console.log("对象是空的"); }
补充说明:
你不需要把对象改成数组,因为你的需求是用data-id作为键、文本作为值的映射关系,对象的结构完全匹配这个需求——数组的键只能是数字索引,反而不适合你的场景。之前的代码逻辑没问题,只是判断空的方式选错了~
内容的提问来源于stack exchange,提问作者Cesar Bielich
相关产品推荐
相关产品推荐

