当前位置: 首页 > Web前端 > HTML5

使用Js-Es6判断对象是否为空,判断对象是否包含某个属性

时间:2023-04-05 18:17:05 HTML5

场景一、页面初始化时,需要渲染一个对象的属性对应的数据,但是初始值或者后端可能返回null或者{}data(){return{a:{}}},cerated(){letres=null//or{}this.a=res}一旦物体层次超过三层,就会报错。如果找不到某个属性,js会报错,页面渲染也会被阻塞。

{{a.b.c}}
2.当对象的某个属性存在时,发起请求,或者其他交互,比如检测商品id,账单金额,用户openid等解决方案,或者在初始化的时候添加需要的属性,要么做非空判断。给初始值加上属性可以避免渲染阻塞,但是后端返回数据为{},还是需要做同样的处理,不是很方便,也容易出错。a={b:{c:""}}推荐的方式是非空判断,判断一个属性是否存在。如果为真,则取值,如果为假,则给出默认值,判断对象是否为空。(1)使用JSON.stringify将对象转为字符串,然后判断字符串是否等于"{}"consta={test:123}JSON.stringify(a)==="{}"//false(2)ES6新方法,通过Object.keys,Object.values,Object.entries返回一个数组,判断数组长度是否大于0就可以了consta={test:123}console.log(Object.keys(a).length)//1是否有某个属性(1)通过上面的方法返回一个包含键值对的数组后,判断数组中是否有对应的值,使用indexOf,-1表示不存在consta={test:123}Object.keys(a).indexOf("test")//0Object.keys(a).indexOf("show")//-1(2)ES6attributenameinobject,返回一个布尔值consta={test:123}"test"ina//true"show"ina//false(3)hasOwnProperty方法,该方法用于检测属性是否对象的存在consta={test:123}a.hasOwnProperty('test')//truea.hasOwnProperty('show')//false