所以我正在编写一个浏览器应用程序,它从许多不同的公共 API(通过 JSONP)获取数据并使用该数据来装饰我的本地记录。
是的,这可以事先在服务器端完成,但我还没有。
我以前从未在 JavaScript 中使用过 try/catch。在尝试查找response.foo.bar.baz
可能更改的响应时,现在是使用它的好时机吗?
或者,是否有一种更优雅的方法来查找深度嵌套的属性并且如果找不到它不会抛出错误?
所以我正在编写一个浏览器应用程序,它从许多不同的公共 API(通过 JSONP)获取数据并使用该数据来装饰我的本地记录。
是的,这可以事先在服务器端完成,但我还没有。
我以前从未在 JavaScript 中使用过 try/catch。在尝试查找response.foo.bar.baz
可能更改的响应时,现在是使用它的好时机吗?
或者,是否有一种更优雅的方法来查找深度嵌套的属性并且如果找不到它不会抛出错误?
你可以这样做:
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']);
写起来可能更容易:
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
块可能是一个不错的选择!