编程语言
首页 > 编程语言> > JavaScript,检查null / undefined 的嵌套对象属性的优雅方法

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