JavaScript,检查null / undefined 的嵌套对象属性的优雅方法
作者:互联网
参见英文答案 > Test for existence of nested JavaScript object key 53个
我偶尔会遇到一个“问题”,就是我有一个对象,例如: user = {}并且通过使用应用程序的过程,这将被填充.让我们说一下,在AJAX调用之后或者我这样做的事情:
user.loc = {
lat: 50,
long: 9
}
在另一个地方,我想检查user.loc.lat是否存在.
if (user.loc.lat) {
// do something
}
如果它不存在,这将导致错误.如果user.loc.lat未定义,则user.loc当然也是未定义的.
"Cannot read property 'lat' of null" - Dev Tools error
这意味着我需要像这样检查:
if (user.loc) {
if (user.loc.lat) {
// do something
}
}
要么
if (user.loc && user.loc.lat) {
// do something
}
这不是很漂亮,我的对象越大越好 – 显然(想象10级嵌套).
如果(user.loc.lat)不仅仅返回false,如果user.loc也是未定义的话,那真是让我感到遗憾.
检查这种情况的理想方法是什么?
解决方法:
您可以使用这样的实用程序函数:
get = function(obj, key) {
return key.split(".").reduce(function(o, x) {
return (typeof o == "undefined" || o === null) ? o : o[x];
}, obj);
}
用法:
get(user, 'loc.lat') // 50
get(user, 'loc.foo.bar') // undefined
或者,仅检查属性是否存在,而不检查其值:
has = function(obj, key) {
return key.split(".").every(function(x) {
if(typeof obj != "object" || obj === null || ! x in obj)
return false;
obj = obj[x];
return true;
});
}
if(has(user, 'loc.lat')) ...
标签:javascript,javascript-objects,object 来源: https://codeday.me/bug/20190919/1812885.html