如何判断一个对象是否为空对象?即是否是 `{}` 这样的对象。 #### 方法 1:ES6 `Object.keys` 判断长度 ```js const isObject = obj => Object.prototype.toString.call(obj) === '[object Object]'; const isEmptyObject = obj => isObject(obj) ? Object.keys(obj).length === 0 : false; isEmptyObject({}); // true isEmptyObject({a: 1}); // false ``` #### 方法 2:for in 循环判断 ```js const isEmptyObject = obj => { for (let key in obj) { if (obj.hasOwnProperty(key)) { return false } } return true; }; isEmptyObject({}); // true isEmptyObject({a: 1}); // false ``` #### 方法 3:方法 2 的变种 ```js Object.defineProperty(Object.prototype, 'isEmptyObject', { writable: false, enumerable: false, configurable: false, value: function() { for (let key in this) { if (this.hasOwnProperty(key)) { return false } } return true; } }); // 注意:字面量对象调用时要将表达式用小括号包起来 ({}.isEmptyObject()); // true ({a: 1}.isEmptyObject()); // false let obj = {}; obj.isEmptyObject(); // true ``` #### 方法 4:`JSON.stringify` 转换判断 ```js const isEmptyObject = obj => JSON.stringify(obj) === '{}'; isEmptyObject({}); // true isEmptyObject({a: 1}); // false ```
Activity