关于javascript:JavaScript-判断对象是否为空的几种方法

32次阅读

共计 1910 个字符,预计需要花费 5 分钟才能阅读完成。

一. 应用 JSON.stringify()将对象转换为 json 字符串

这个办法比拟讨巧,也是最容易想到的。咱们都晓得 JSON.stringify()的作用是将 Javascript 对象转换为 JSON 字符串。所以,能够通过该办法判断对象是否为空:

const obj = {}
const obj2 = new Object()

console.log(JSON.stringify(obj) === '{}')  // true
console.log(JSON.stringify(obj2) === '{}')  // true

留神:

  • 该办法有个毛病,JSON.stringify()只能序列化对象的可枚举的自有属性,即如果有属性是不可枚举或继承属性的话,后果也是 true

    const obj = {}
    ​
    // 在原型上增加一个可枚举属性
    Object.prototype.name = 'Jack'
    ​
    console.log(JSON.stringify(obj) === '{}')  // true
    ​
    // 在 obj 对象上增加一个不可枚举属性
    Object.defineProperty(obj, 'age', {
     value: 18,
     enumerable: false
    })
    console.log(JSON.stringify(obj) === '{}')  // true

扩大:

在理论开发我的项目中,我感觉 JSON.stringify()的应用场景还是挺多的,比方:

  • 应用 JSON.stringify() / JSON.parse() 联合 localStorage / sessionStorage 实现对象的缓存存取;
  • 实现对象的深拷贝(留神:若对象中蕴含工夫对象、函数、undefined 等该办法存在的问题)。
  • 更多内容请移步 MDN

二. for…in 循环

应用 for…in 循环遍历对象 除 Symbol 以外的所有可枚举属性,当对象有属性存在返回 false,否则返回 true。

const obj = {}

function isObjectEmpty(obj){for(var key in obj){return false}
    return true
}
console.log(isObjectEmpty(obj)) // true

有时咱们须要只思考对象本身的属性,而不是继承来的,这时能够配合 Object.getOwnPropertyNames() 或 Object.hasOwnProperty() 来进行过滤。

function isObjectEmpty (obj) {for (let key in obj) {if(obj.hasOwnProperty(key)) return false
    }
    return true
}

三. Object.getOwnPropertyNames()

Object.getOwnPropertyNames() 办法会返回该对象 所有可枚举和不可枚举属性 的属性名(不含 Symbol 属性)组成的数组。而后再通过判断返回的数组长度是否为零,如果为零的话就是空对象。

const obj = {}
console.log(Object.getOwnPropertyNames(obj).length === 0)  // true

留神:该办法对于不可枚举的属性也能检测进去。

Object.defineProperty(obj, 'age', {
    value: 18,
    enumerable: false
})
console.log(Object.getOwnPropertyNames(obj).length === 0)  // false

四. Object.keys()

Object.keys() 是 ES5 新增的一个对象办法,该办法返回一个数组,蕴含指定对象 自有的可枚举属性(不含继承的和 Symbol 属性)。用此办法只须要判断返回的数组长度是否为零,如果为零的话就是空对象。

const obj = {}
console.log(Object.keys(obj).length === 0)  //true

Object.prototype.name = 'Jack'
Object.defineProperty(obj, 'age', {
    value: 18,
    enumerable: false
})

console.log(Object.keys(obj).length === 0)  //true

五. 应用内部库

有很多内部的库也能够用来查看空对象。并且,它们大多数对旧的浏览器有很好的反对。

  • jQuery 中的 isEmptyObject 办法

    jQuery.isEmptyObject({})  // true
  • Lodash 的 isEmpty 办法

    _.isEmpty({})  // true

应用该办法的毛病就是须要装置额定的库。所以,依据开发状况抉择适宜的就好。

正文完
 0