面试官:JS判断对象为空有几种方法?

简介: 面试官:JS判断对象为空有几种方法?

640.jpg

1、ES6的 Object.keys()

Object.keys()是一个对象方法,该方法返回一个数组,包含指定对象自有的可枚举属性, 用此方法只需要判断返回的数组长度是否为0,为0就是空对象

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

2、JSON.stringfy()

将Javascript对象转换为JSON字符串

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

这个也是最容易想到的,但是该方法有个缺点,那就是 JSON.stringify()只能序列化对象的可枚举的自有属性,即如果有属性是不可枚举或继承属性的话,结果也是true如:

let obj = {}
Object.defineProperty(obj, 'num', {  // 添加一个不可枚举属性
  value: 1,
  enumerable: false
})
console.log(JSON.stringify(obj) === '{}') // true
Object.prototype.sex = '女' // 原型上添加可枚举的属性
console.log(JSON.stringify(obj) === '{}') // true

3、Object.hasOwnPrototype()

Object.hasOwnPrototype()用来判断指定对象自身是否含有某个属性(非继承), 继承过来的属性会被过滤掉,自身的属性会返回的是true

  let a = {
    name: 'xiaoming',
    brother: undefined
  }
  Object.prototype.sex = '男'
  Object.defineProperty(a, 'sister', {
      value: 'xiaohong',
       enumerable: false
  })
  console.log(a.hasOwnProperty('name')) // true 自身属性
  console.log(a.hasOwnProperty('brother')) // true 
  console.log(a.hasOwnProperty('sex')) // false 原型链上继承的属性
  console.log(a.hasOwnProperty('sister')) // true 不可枚举属性

4、Object.getOwnPropertyNames()

获取到对象中的属性名,存到一个数组中,返回数组对象,我们可以通过判断数组的length来判断此对象是否为空

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

此外,不可没枚举的也可以检测出来

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

5、for..in 循环

let obj = {}
function empty () {
  for (let key in obj) {
    console.log(false, '该对象不是空对象')
    return false
  }
  console.log(true, '该对象是空对象')
  return true
}

扩展:如果只考虑对象自身的属性,而不是继承来的,可以用Object.getOwnPropertyNames() 或 Object.hasOwnProperty() 来进行过滤

function empty () {
  for (let key in obj) {
    console.log(false, '该对象不是空对象')
    if (Object.getOwnPropertyNames().length === 0) return false
  }
  console.log(true, '该对象是空对象')
  return true
}

往期:

面试官:判断数组的方式有哪些

一文解析 Pinia 和 Vuex ,带你全面理解这两个 Vue 状态管理模式

20 个 JS 工具函数助力高效开发

相关文章
|
4天前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
1天前
|
JSON JavaScript 前端开发
如何检查 JavaScript 对象是否为空
【8月更文挑战第18天】
10 0
如何检查 JavaScript 对象是否为空
|
3天前
|
JavaScript 测试技术 索引
js数组方法汇总
js数组方法汇总
6 1
|
4天前
|
JavaScript 前端开发
JavaScript BOM 的概念(浏览器对象模型)
JavaScript BOM 的概念(浏览器对象模型)
12 1
|
4天前
|
JavaScript 前端开发 索引
JS - includes 方法和 map 方法使用方式
这篇文章介绍了JavaScript中数组的`includes`方法和`map`方法的用法,包括它们的语法、参数说明和具体的示例代码。`includes`方法用于判断数组是否包含特定元素,而`map`方法用于对数组中的每个元素执行操作并返回新数组。
9 1
|
4天前
|
JavaScript 前端开发
javascript中常见获取时间戳的方法
javascript中常见获取时间戳的方法
10 0
|
4天前
|
JavaScript 前端开发
js中this是指向的哪个全局变量,改变this指向的方法有什么?
js中this是指向的哪个全局变量,改变this指向的方法有什么?
6 0
|
4天前
|
前端开发 JavaScript
JavaScript 获取 HTML 元素方法
JavaScript 获取 HTML 元素方法
8 0
|
4天前
|
JavaScript 前端开发 安全
JavaScript实现跳转的方法
JavaScript实现跳转的方法
|
4天前
|
JavaScript 前端开发 索引
JavaScript数组相关的方法有哪些?
JavaScript数组相关的方法有哪些?

热门文章

最新文章