对象或数组防止属性为空报错,defaultValue可以指定没有找到属性值返回的默认值
最近遇到这个问题,写了个函数,这个函数是加在Object原型上的。
//对象或数组防止属性为空报错 defaultValue可以指定没有找到属性值返回的默认值
Object.defineProperty(Object.prototype,'getValue',{
enumerable:false,
value:function (objString, defaultValue) {
console.log(this)
if (!this) {
return defaultValue;
}
let regExp = new RegExp(/[^\. \[ \]]+/g);
let propList = objString.match(regExp);
if(propList.length===1){
return this;
}
let value = this[propList[1]];
if(value!==undefined&&(value!==null)){
for (let i = 2; i < propList.length; i++) {
if (value[propList[i]]!==undefined&&(value[propList[i]]!==null)) {
value = value[propList[i]];
} else {
console.log([propList[i-1]]+'的属性'+[propList[i]]+' '+value[propList[i]])
return defaultValue;
}
}
return value
}else{
console.log([propList[0]]+'的属性'+[propList[1]]+' '+value)
return defaultValue;
}
}
});
//getValue 使用
var obj = {
code:0,
result:[
{
name:'李阳',
arr:[1,2,3,45,56,67,8]
}
]
};
var arr = [
{
name:'李阳',
arr:[1,2,3,45,56,67,8]
}
];
var str='sdfdsfsd';
var Value = obj.getValue("obj.result1");
var Value1 = arr.getValue("arr[0].arr[6].name");
var Value2 = str.getValue("str.null");
console.log(Value)
console.log(Value1)
console.log(Value2)
如果帮到了你请给个赞,感谢!!