一、基本思路
判断对象是否为空对象通常可以使用 for...in
语句遍历对象,如果对象存在属性,则不是空对象。
function isEmptyObject(obj) {
for(var key in obj) {
return false;
}
return true;
}
var myObj = {}
isEmptyObject(myObj) // true
代码通过 for...in
语句遍历对象,如果对象存在属性,则直接返回 false
,表示不是空对象。如果 for...in
语句结束,还没有找到任何属性,则说明是空对象,返回 true
。
二、进一步优化
1. 使用 Object.keys
方法
Object.keys(obj)
方法可以获取对象中所有属性名组成的数组,并可以通过判断数组长度是否为 0 来判断对象是否为空对象。
function isEmptyObject(obj) {
return Object.keys(obj).length === 0;
}
var myObj = {}
isEmptyObject(myObj) // true
代码通过 Object.keys(obj)
方法获取对象中所有属性名组成的数组,判断数组长度是否为 0 来判断对象是否为空对象。
2. 为 Object
对象添加 isEmpty
方法
将 isEmptyObject
方法变成 Object
对象的一个方法,可以更好地维护代码和增强代码的可读性。
Object.prototype.isEmpty = function() {
return Object.keys(this).length === 0;
}
var myObj = {}
myObj.isEmpty() // true
代码通过将 isEmptyObject
方法变成 Object
对象的一个方法,调用对象的 isEmpty
方法来判断是否是空对象。
三、注意事项
1. 对象为 null
或 undefined
时,需要特殊处理
如果对象为 null
或 undefined
,直接使用 for...in
语句访问会抛出异常,需要特别判断。
function isEmptyObject(obj) {
if(obj === null || obj === undefined) {
return true;
}
for(var key in obj) {
return false;
}
return true;
}
var myObj = null
isEmptyObject(myObj) // true
代码通过判断对象是否为 null
或 undefined
,进行特殊处理,避免了 for...in
语句抛出异常。
2. 对象存在继承属性时,需要特殊处理
如果对象存在继承属性,则使用 for...in
语句遍历对象时,会把继承属性也遍历出来,需要特别处理。
function isEmptyObject(obj) {
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
var myObj = Object.create({name: 'Tom'})
isEmptyObject(myObj) // true
代码通过判断属性是否是对象本身的属性,避免了继承属性被误当成对象的属性,从而保证了函数的正确性。
四、总结
判断对象是否为空对象是 JavaScript 中常见的操作,可以使用 for...in
语句或 Object.keys
方法来实现。通过为 Object
对象添加 isEmpty
方法,不仅可以增强代码的可读性,还可以方便地对多个对象进行判断。在使用判断对象是否为空对象的函数时,需要特别处理 null
、undefined
等情况,同时也需要特别注意对象的继承属性。