爱收集资源网

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

网络整理 2023-10-28 13:06

怎样判别JS对象是不是为空

这儿的空对象指的不是null和undefined

假如要判定是否为null或undefinedjs判断属性是否为空,通过非空判定即可.

const a = null
const b = undefined
console.log(!a) // true
console.log(!b) // true

判定是否为{}

这儿的空对象指的是对象是存在的,而且上面没有任何属性和技巧。

常用解决方案

通过ES6句型Object.keys()进行判别

js判断属性是否为空_判断属性值是否为null_判断为空为null方法

const a = {
  name: 'a'
}
const b = {}
console.log(Object.keys(a).length === 0) // false
console.log(Object.keys(b).length === 0) // true

const a = {
  name: 'a'
}
const b = {}
console.log(JSON.stringify(a) === '{}') // false
console.log(JSON.stringify(b) === '{}') // true

const a = {
  name: 'a'
}
const b = {}
console.log(Object.getOwnPropertyNames(a).length === 0) // false
console.log(Object.getOwnPropertyNames(b).length === 0) // true

特殊情况

当对象的key为Symbol()数据类型的时侯,以上方案是否还适用呢?

const a = { [Symbol()]: 'a' }
console.log(a) // { [Symbol()]: 'a' }
console.log(JSON.stringify(a) === '{}') // true
console.log(Object.keys(a).length === 0) // true
console.log(Object.getOwnPropertyNames(a).length === 0) // true

每一个都是返回truejs判断属性是否为空,所以结果是错误的。a并非空对象。

判断为空为null方法_判断属性值是否为null_js判断属性是否为空

这么在Symbol作为key的时侯我们可以考虑使用另外一种方式

getOwnPropertySymbols

console.log(Object.getOwnPropertySymbols(a).length === 0) // false

最终解决方案

1.结合getOwnPropertySymbols和getOwnPropertyNames

const a = { [Symbol()]: 'a' }
const b = { a: 'a' }
const c = {}
console.log(Object.getOwnPropertyNames(a).length === 0 && Object.getOwnPropertySymbols(a).length === 0) // false
console.log(Object.getOwnPropertyNames(b).length === 0 && Object.getOwnPropertySymbols(b).length === 0)  // false
console.log(Object.getOwnPropertyNames(c).length === 0 && Object.getOwnPropertySymbols(c).length === 0)  // true

Reflect.ownKeys()

const a = { [Symbol()]: 'a' }
const b = { a: 'a' }
const c = {}
console.log(Reflect.ownKeys(a).length === 0) // false
console.log(Reflect.ownKeys(b).length === 0) // false
console.log(Reflect.ownKeys(c).length === 0) // true

js判断属性是否为空
上一篇:一键下料,助你轻松开发门窗 下一篇:没有了