在 AJAX 响应中查找嵌套属性,这是 try/catch 的情况

Looking up nested properties in AJAX response, a case for try/catch?

本文关键字:try 这是 catch 情况 属性 响应 AJAX 查找 嵌套      更新时间:2023-09-26

所以我正在编写一个浏览器应用程序,它从许多不同的公共 API 获取数据(通过 JSONP),并使用这些数据来装饰我的本地记录。

是的,这可以事先在服务器端完成,但我还没有。

我以前从未在 JavaScript 中使用过 try/catch。在尝试在容易更改的响应中查找response.foo.bar.baz时,现在是使用它的好时机吗?

或者,是否有一种更优雅的方法来查找深度嵌套属性,并且在找不到时不会引发错误?

写起来可能更容易:

try {
    response.foo.bar.baz;
}
catch (e) {
    //oops
}

比:

if( response && response.foo && response.foo.bar && "baz" in response.foo.bar ) {
}
else {
    //oops
}

鉴于替代方案是这样的:

if ('foo' in response &&
    'bar' in response.foo &&
    'baz' in response.foo.baz)
{
    ...
}

在这种情况下,听起来try / catch块可能是一个不错的选择!

你可以做这样的事情:

response && response.foo && response.foo.bar && response.foo.bar.baz

如果其中一个嵌套属性不存在,它将返回undefined否则它将返回response.foo.bar.baz的内容。

或者您可以使用此功能:

function getNestedProperty(firstObject, propertiesArray)
{
    if(firstObject instanceof Object)
    {
        var currentObject = firstObject;
        for(var i = 0; i < propertiesArray.length; i++)
        {
            if(currentObject.hasOwnProperty(propertiesArray[i]))
            {
                currentObject = currentObject[propertiesArray[i]];
            }
            else
            {
                return false;
            }
        }
        return currentObject;
    }
    else
    {
        return false;
    }
}

用法:

getNestedProperty(response, ['foo', 'bar', 'baz']);