js 如何判断对象自身为空?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
1. JSON.stringify
const obj = {}; console.log(JSON.stringify(obj) === '{}') // true 缺点:如果存在 如下示例: const obj = { a: undefined, b: function() {}, c: Symbol() } console.log(JSON.stringify(obj) === '{}') // true 2. for in 配合 hasOwnProperty使用 const obj = {} Object.prototype.a = 1 function isEmptyObj(obj) { let flag = true for (let o in obj) { flag = false break } return flag } console.log(isEmptyObj(obj)) // false 由于 const obj = {} Object.prototype.a = 1 function isEmptyObj(obj) { let flag = true for (let o in obj) { if (obj.hasOwnProperty(o)) { flag = false break } } return flag } console.log(isEmptyObj(obj)) // true 缺点: 3. Object.keys
const obj = {} Object.prototype.a = 1 console.log(Object.keys(obj).length === 0) // true 缺点: 我们使用 const obj = {} Object.defineProperty(obj, 'a', { value: 1, enumerable: false }) console.log(obj.a) // 1 console.log(isEmptyObj(obj)) // true console.log(Object.keys(obj).length === 0) // true 4. Object.getOwnPropertyNames使用 const obj = {} Object.defineProperty(obj, 'a', { value: 1, enumerable: false }) console.log(Object.getOwnPropertyNames(obj)) // [ 'a' ] 缺点:不能获取 const a = Symbol() const obj = { [a]: 1 } console.log(obj) // { [Symbol()]: 1 } console.log(Object.getOwnPropertyNames(obj).length === 0) // true console.log(JSON.stringify(obj) === '{}') // true console.log(isEmptyObj(obj)) // true console.log(Object.keys(obj).length === 0) // true 5. Object.getOwnPropertyNames 结合 Object.getOwnPropertySymbols已知 const a = Symbol() const obj1 = { [a]: 1 } const obj2 = {b: 2} const obj3 = {} Object.defineProperty(obj3, 'a', { value: 1, enumerable: false }) const obj4 = {} function getLength(obj) { return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)).length } console.log(getLength(obj1) === 0) // false console.log(getLength(obj2) === 0) // false console.log(getLength(obj3) === 0) // false console.log(getLength(obj4) === 0) // true 经过测试,上面这种方法的确可以解决,但是比较繁琐,那有没有更好的方法呢?答案是有的。 6. Reflect.ownKeys
const a = Symbol() const obj1 = { [a]: 1 } const obj2 = {b: 2} const obj3 = {} Object.defineProperty(obj3, 'a', { value: 1, enumerable: false }) const obj4 = {} console.log(Reflect.ownKeys(obj1).length === 0) // false console.log(Reflect.ownKeys(obj2).length === 0) // false console.log(Reflect.ownKeys(obj3).length === 0) // false console.log(Reflect.ownKeys(obj4).length === 0) // true 总结判断一个对象是否为空时,使用
该文章在 2023/11/27 12:02:10 编辑过 |
关键字查询
相关文章
正在查询... |