js怎样判别对象属性是否为空,js对象为空
admin08-2406:34140次浏览
js判定对象为空早已有好几种方式了,而且个人认为不是非常便捷。
例如:
1、把对象通过JSON.stringify转为字符串,再判定字符串是否等于"{}"
2、forin循环,判定key是否存在
3、jq的方式
es6早已帮我们挺好的解决了这种问题。
es6针对对象降低了3个新方式(链表也有):
(1)、Object.keys:返回一个链表,成员是参数对象自身的(不含承继的)所有可遍历属性的键值
(2)、Object.values:返回一个链表,成员是参数对象自身的(不含承继的)所有可遍历属性的通配符
(3)、Object.entries:返回一个链表,成员是参数对象自身的(不含承继的)所有可遍历属性的通配符对
由此,我们可以通过其中任意一个方式,得到返回的链表,判定链表宽度是否小于0,来判定对象是否为空。
举个板栗:
constobj={foo:'bar',baz:42}console.log(Object.keys(obj));//["foo","baz"]console.log(Object.values(obj));//["bar",42]console.log(Object.entries(obj));//[["foo","bar"],["baz",42]]//复印返回值的宽度console.log(Object.keys(obj).length);//2constobj2={};console.log(Object.keys(obj2));//[]//复印空对象的宽度console.log(Object.keys(obj2).length);//0
这样我们就可以很简单直观的判别出对象是否为空,而且可以通过这三个方式,领到想要的数据(键值、键值、键值对)
这么既然得到了返回值字段,我们也可以很简单的判定对象中是否包含某个我们已知的属性名
console.log(Object.keys(obj).indexOf('baz'));//1console.log(Object.keys(obj).indexOf('ad'));//-1
indexOf可以判定字段是否包含某个值js判断属性是否为空,返回该值所对应的下标js判断属性是否为空,对于不存在的值,返回-1
这样我们才能判定对象是否包含某个属性名了
其实了,es6还提供了其他几种判定对象是否包含属性名的方式,如下:
1、in:属性名in对象(判定属性名是否在对象中存在,返回一个布尔值)
console.log('baz'inobj);//true
2、hasOwnProperty:对象.hasOwnProperty(属性名)(判定对象中是否富含某个属性名,返回一个布尔值)
console.log(obj.hasOwnProperty('baz'));//true
好了,以上就是es6中判定对象是否为空,但是判定对象是否包含某个属性的方式
如有问题,请强调,接收批评。