JS判断对象是否为空的方法

发布于:2025-03-31 ⋅ 阅读:(13) ⋅ 点赞:(0)

在 JavaScript 中,判断一个对象是否为空对象(即没有自身可枚举属性),可以通过以下方法实现:

方法 1:使用 Object.keys()

javascript

function isEmptyObject(obj) {
  // 确保是普通对象(排除 null、数组和其他对象类型)
  return Object.prototype.toString.call(obj) === '[object Object]' && 
    Object.keys(obj).length === 0;
}

方法 2:使用 for...in 循环

javascript

function isEmptyObject(obj) {
  if (Object.prototype.toString.call(obj) !== '[object Object]') {
    return false;
  }
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      return false;
    }
  }
  return true;
}

方法 3:使用 JSON.stringify()

javascript

function isEmptyObject(obj) {
  try {
    return Object.prototype.toString.call(obj) === '[object Object]' && 
      JSON.stringify(obj) === '{}';
  } catch (e) {
    return false; // 处理循环引用异常
  }
}

说明:

  1. 类型检查
    使用 Object.prototype.toString.call(obj) === '[object Object]' 确保目标是一个普通对象(如 {} 或 new Object()),排除数组、null、日期等特殊对象类型。

  2. 检查属性

    • Object.keys(obj).length === 0:仅检查对象自身的可枚举属性。

    • for...in + hasOwnProperty:遍历对象自身属性,避免原型链干扰。

    • JSON.stringify():将对象转换为字符串判断,但无法处理不可枚举属性和循环引用。

  3. 边界情况

    • 若对象只有 Symbol 属性或不可枚举属性,上述方法可能返回 true(需用 Reflect.ownKeys() 检测所有属性)。

    • 非对象类型(如 null、数字)直接返回 false


使用示例:

javascript

isEmptyObject({});          // true
isEmptyObject({ a: 1 });    // false
isEmptyObject([]);          // false
isEmptyObject(null);        // false
isEmptyObject(Object.create(null)); // true
isEmptyObject(new Date());  // false

根据实际需求选择合适的方法,通常推荐 方法 1 或 方法 2