下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第JS判断空对象的几个方法大盘点目录知识准备Object.keysObject.getOwnPropertyNames可枚举属性hasOwnProperty盘点判空方法JSON.stringify判空forin判空Object.getOwnPropertyNames判空Object.keys()判空hasOwnProperty判空附将对象转换为字符串进行比较总结
知识准备
在盘点JS判空方法之前我们先来了解下面的三个方法。
Object.keys
Object.keys()方法是以对象为参数,返回一个包含该对象内所匹配的属性和方法的数组
varobj={
name:"cxy",
age:"19"
varobjArray=Object.getOwnPropertyNames(obj);
console.log(objArray)
可以看到objArray为返回值,且返回值为以对象内的属性为内容的数组
Object.getOwnPropertyNames
Object.getOwnPropertyNames()方法同样是也是以对象为参数,返回一个包含该对象内所匹配的属性和方法的数组
大家在这里会发出疑问,这两个有啥区别?Object.getOwnPropertyNames()可以返回所有的属性,而Object.keys()只能返回可枚举属性,诶?到这里大家又疑惑了可枚举属性又是个啥?不要着急,我来解释一下什么叫可枚举属性
可枚举属性
可枚举或者不可枚举属性是对象内部通过可枚举标志enumerable来进行区分的,在默认情况下,我们=cxy为对象新增了一个属性后,其可枚举标志enumerable为ture,而当其值为false的时候它是不可枚举的,当我们对对象进行for,Object.keys(),JSON.stringify()的时候不可枚举属性是找不出来的,我们可以理解为不可枚举属性是隐身的
现在我们拿上面的Object.getOwnPropertyNames和Object.keys()进行实战举例,我们通过defineProperty来为对象添加age属性,因为该方法可以设置枚举标志,这里设置为false,可以看到下面两个不同的返回结果
varstuObj={
name:"cxy"
Object.defineProperty(stuObj,'age',{
value:"18",
enumerable:false
console.log(Object.keys(stuObj))
console.log(Object.getOwnPropertyNames(stuObj))
hasOwnProperty
hasOwnProperty()是用来判断某对象是否含有某属性的,其参数为属性名
varstuObj={
name:"cxy"
console.log(stuObj.hasOwnProperty('name'))
但是这里要注意一个问题就是,hasOwnProperty()判断继承属性的时候会返回false,继承属性即对象从原型对象上继承的属性,比如说toString
盘点判空方法
JSON.stringify判空
这种方式是比较简单的了,使用JSON.stringify将对象转换为字符串,再通过等于判断即可得到对象是否为空的布尔值
letobj={
name:"cxy"
console.log(JSON.stringify(obj)=='{}')
forin判空
使用forin的话可以当触发循环的时候返回false没有触发循环的时候代表对象为空返回ture
letforNull=(items)={
for(letiteminitems){
returnfalse
returntrue
}
Object.getOwnPropertyNames判空
这里使用了上文提及的Object.getOwnPropertyNames,将返回的数组的length作为判断依据。
letstuArray=Object.getOwnPropertyNames(obj)
console.log(stuArray.length===0)
Object.keys()判空
和上个方法一样,使用数组作为判断依据
letstuArray=Object.getOwnPropertyNames(obj)
console.log(stuArray.length===0)
hasOwnProperty判空
使用hasOwnProperty是使用for循环将元素进行判断如果含有则返回false说明不为空,反之则为空
letforNull=(items)={
for(letiteminitems){
if(items.hasOwnProperty(item)){
returnfalse
returntrue
}
附将对象转换为字符串进行比较
这种方法很不推荐,但也确实是最容易想到的,主要使用JSON.stringify()这个方法对对象进行强转,贴出来仅供一看:
vara={};
varb=n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册会计师战略中ESG战略实施的管理体系
- 2026年企业借款合同法律效力认定标准
- 2026重庆市璧山区人民医院上半年编外人才招聘41人备考题库及参考答案详解(考试直接用)
- 2026广东广州市白云区人民政府松洲街道办事处第一次招聘项目人员9人备考题库含答案详解(b卷)
- 2026河南黄金叶投资管理有限公司所属企业大学生招聘18人备考题库(含答案详解)
- 2026广西崇左天等县市场监督管理局招聘编外工作人员1人备考题库带答案详解(满分必刷)
- 2026山东青岛海关缉私局警务辅助人员招聘10人备考题库及参考答案详解(综合题)
- 2026中盐东兴盐化股份有限公司招聘17人备考题库带答案详解(培优)
- 2026春季浙商银行校园招聘备考题库附参考答案详解(综合卷)
- 2026四川内江市隆昌市普润镇人民政府招聘1人备考题库附答案详解(基础题)
- ESD和EMR术临床路径
- 激光纳米散射仪(马尔文)
- 钢平台铺板计算excel(可当计算书)
- 冷鲜肉猪肉白条分割技术详细结构图及产品部位介绍和用途
- 中国古代文学史元明清文学PPT完整全套教学课件
- 《安徒生童话》推荐导读课教学设计
- 海上固定平台安全规则
- DB51T 1628 -2013小(微)型农田水利工程施工质量检验与评定规程
- 语文新课标下:基于大单元学习任务的《表里的生物》设计(六下)
- 要求掌握的十八个文言文虚词
- 天山天池景区介绍-天山天池景点PPT(经典版)
评论
0/150
提交评论