前端/移动开发面试题更新 2026-08-05

在 JavaScript 中,有哪些方法可以判断一个对象是否为空对象?请列举常见做法并比较其优劣。

前端/移动开发技术原理方案权衡JavaScript

考察说明

考查对 JavaScript 对象属性枚举、原型链及 JSON 序列化等机制的理解,以及在不同场景下选择合适判断方法的能力。

回答思路

  1. 【回答框架 1】空对象通常指没有自身可枚举属性的对象。常用方法有:Object.keys(obj).length === 0 和 for...in 配合 hasOwnProperty 检查。前者只统计自身可枚举属性,后者需手动过滤继承属性。
  2. 【回答框架 2】还可以使用 JSON.stringify(obj) === '{}',但该方法对 undefined、函数或 Symbol 值会忽略这些属性,且无法区分属性值为 undefined 的情况,存在误判风险。
  3. 【回答框架 3】若需判断所有自身属性(包括不可枚举),可用 Object.getOwnPropertyNames(obj).length === 0,但需注意 Symbol 属性需额外用 Object.getOwnPropertySymbols 检查。
  4. 【回答框架 4】在判断前需确认 obj 是对象(非 null),可通过 typeof obj === 'object' && obj !== null 或 Object.prototype.toString 等方法。
  5. 【关键点 1】最常用且直观:Object.keys(obj).length === 0。
  6. 【关键点 2】for...in 需配合 hasOwnProperty,否则会包含继承属性。
  7. 【关键点 3】JSON.stringify 方法有缺陷,不建议用于严格判断。
  8. 【关键点 4】考虑不可枚举属性时,需结合 getOwnPropertyNames 和 getOwnPropertySymbols。
  9. 【易错点 1】直接使用 for...in 会遍历到原型链上的可枚举属性,导致误判。
  10. 【易错点 2】JSON.stringify 会将值为 undefined 的函数或属性忽略,造成非空对象被误判为空。
  11. 【易错点 3】注意 typeof null === 'object',需先排除 null。