Skip to content

5.如何判断一个对象为空及for..in/of

如何判断一个对象为空?

判断一个对象为空有很多种方法

  • 方法一: 将对象转为字符串,与"{}"进行比较

    js
      const a = {}
      console.log(JSON.stringify(a) == '{}') // true
  • 方法二: 通过for...in循环判断

    只有当对象不为空(可遍历时),for循环才会执行,返回false,否则返回true

    js
      const a = {}
      for(let i in a) {
        return false
      }
      return true
  • 方法三: 通过Object.keys()方法判断

Object.keys()返回一个数组,数组内包含了对象的所有键(keys),通过数组的长度,来判断对象是否为空

js
    const a = {}
    const keyArrs = Object.keys(a) // []
    console.log(keyArrs.length) // 0

Object.getOwnPropertyNames()返回一个数组,其元素是与给定对象 obj 直接关联的可枚举和不可枚举属性对应的字符串。

js
    const a = {}
    const keyArrs = Object.getOwnPropertyNames(a) // []
    console.log(keyArrs.length) // 0

for...in和for...of

for...in

for...in返回的是数据结构的键名。遍历对象返回的是对象的key,遍历数组返回的是数组的下标。(会遍历原型上的值和手动添加的值)

for...of

for...of获取一对键值中的值。一个数据结构只要部署了Symbol.iterator属性,就被视为具有iterator接口,可以使用for...of。for...of不同于forEach,for of是可以break,continue,return配合使用,for of 循环可以随时退出循环。

Symbol.iterator

哪些数据结构部署了Symbol。iterator属性? 以下数据解构有iterator接口:

  • Array
  • Map
  • Set
  • String
  • arguments
  • Nodelist

部署了iterator接口的数据结构都可以使用数组的扩展运算符和解构赋值等

KESHAOYE-知识星球