正文
一、支持 Object.keys 情况下
- 排除
undefined
、null
等报错 - 判断是否含
key
- 通过构造函数排除包装类,如
new String()
、new Boolean()
等情况
这种方法有个不足的是,倘若通过
let emptyObj = Object.create(null)
创建空对象,那么emptyObj.constructor === Object
就不成立了。
function isEmptyObject(val) { return val && Object.keys(val).length === 0 && val.constructor === Object }
二、不支持 Object.keys 时
function isEmptyObject(val) { return Object.prototype.toString.call(val) === '[object Object]' && JSON.stringify(val) === '{}' }
三、使用第三方 JS 库
// Lodash _.isEmpty(val) // Underscore _.isEmpty(val) // jQuery $.isEmptyObject(val)