当前位置: 首页 > news >正文

昆明网站定制开发各大网站收录入口

昆明网站定制开发,各大网站收录入口,wordpress更改图标,网页设计图片怎么变小如何判断一个对象为空是我们在开发中经常会遇到的问题,今天我们来聊聊几种经常使用的方法,以及在不同的场景下我们如何去使用。 1. JSON.stringify JSON.stringify 方法可以使对象序列化,转为相应的 JSON 格式。 js 复制代码 const obj {…

如何判断一个对象为空是我们在开发中经常会遇到的问题,今天我们来聊聊几种经常使用的方法,以及在不同的场景下我们如何去使用。

1. JSON.stringify

JSON.stringify 方法可以使对象序列化,转为相应的 JSON 格式。

js
复制代码
const obj = {};console.log(JSON.stringify(obj) === '{}')  // true

缺点:如果存在 undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。更多[1]

如下示例:

const obj = {a: undefined,b: function() {},c: Symbol()
}console.log(JSON.stringify(obj) === '{}')  // true

2. for in 配合 hasOwnProperty

使用 for in 对当前对象进行遍历:

const obj = {}
Object.prototype.a = 1function isEmptyObj(obj) {let flag = truefor (let o in obj) {flag = falsebreak}return flag
}console.log(isEmptyObj(obj))  // false

由于 for in 在进行对象遍历时,会遍历对象原型上的属性,而我们只希望得到其自身的属性,这时可以使用 hasOwnProperty 来实现,如下:

const obj = {}
Object.prototype.a = 1function isEmptyObj(obj) {let flag = truefor (let o in obj) {if (obj.hasOwnProperty(o)) {flag = falsebreak}}return flag
}console.log(isEmptyObj(obj))  // true

缺点:for in 不能遍历不可枚举的属性。

3. Object.keys

Object.keys 会返回对象自身可枚举属性组成的数组,而不会遍历原型上的属性。

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

缺点:Object.keys 和 for in 都只能遍历可枚举属性,不能遍历不可枚举的属性。

我们使用 Object.defineProperty 将属性 enumerable 设置为 false 来进行测试,示例如下:

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

使用 Object.getOwnPropertyNames 可以得到对象自身的所有属性名组成的数组(包括不可枚举属性)。

const obj = {}
Object.defineProperty(obj, 'a', {value: 1,enumerable: false
})console.log(Object.getOwnPropertyNames(obj))  // [ 'a' ]

缺点:不能获取 Symbol 值作为名称的属性,以上的 JSON.stringifyfor in 以及 Object.keys 方法也不能获取Symbol 值作为名称的属性,示例如下:

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

已知 Object.getOwnPropertyNames 唯一的缺点是不能获取 Symbol 值作为名称的属性,而 Object.getOwnPropertySymbols 只能获取由 Symbol 值作为名称的属性,两者相结合是不是就可以完美解决了。我们来简单测试一下:

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

Reflect.ownKeys 方法返回一个由目标对象自身的属性组成的数组,它的返回值等同于 Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)),示例如下:

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

总结

判断一个对象是否为空时,使用 Reflect.ownKeys 方法最为完美。

http://www.yidumall.com/news/43859.html

相关文章:

  • 怎么让别人找你做网站谷歌推广开户多少费用
  • html视频网站源码国内产女装一线二线品牌知乎
  • 查询网站备案时间html网站模板免费
  • 那个网站做二手车好免费html网站制作成品
  • 广州市做民宿什么网站比较好品牌推广专员
  • 织梦网站怎样做锚文本大连seo优化
  • 做网站的需求调研semiconductor是什么意思
  • 飞数石家庄网站建设seo专业知识培训
  • wordpress图片抓取插件南平网站seo
  • 小米路由可以做网站吗黑帽seo教程
  • 网站内容包括哪些统计工具
  • 网站备案照片背景国内免费顶级域名注册
  • 新网站怎么做谷歌推广呢适合30岁短期培训班
  • 开一家网站建设公司网络营销课程培训
  • 一般网站建设用什么语言网站推广和优化的原因
  • 企业自己做网站搜索引擎关键词排名优化
  • 广西住房和城乡建设厅培训中心网站ks免费刷粉网站推广
  • 固阳网站建设站长工具seo综合查询问题
  • 动态网站做优化成都新站软件快速排名
  • 用tornado做网站站长之家工具查询
  • 优书网推书附子seo教程
  • 济南网站建设培训班青岛官网seo公司
  • 做网站seo的公司哪家好谷歌seo外包公司哪家好
  • 网站建设与设计毕业论文智能建站模板
  • 阿里网站注册百度推广营销怎么做
  • 复兴区建设局网站有创意的网络广告案例
  • 手机版网站建设合同阿里指数在线查询
  • 做电影资讯网站算侵权吗软文推广哪个平台好
  • 中国新闻网上海新闻关键词排名优化公司地址
  • 6网站建设做网站360广告推广平台