【发布时间】:2015-11-30 06:36:05
【问题描述】:
假设两次尝试都失败,url 返回未定义,console.log 在这种情况下不会执行。我的 try-catch 子句堆叠有问题,还是 url 变量的范围有问题?
我正在使用 try-catch,因为在我的上下文 url1,2 中,默认值可能不可用。
getURL = function()
{
var url;
try{
url=data.url1;
}
catch(err1)
{
try{
url=data.url2;
}
catch(err2)
{
console.log("Fetching default url");
url=data.defaulturl;
}
}
finally
{
//do something with url
}
}
我尝试使用 if-else-if 结构,但如果 data.url 1/2/default 不可用,则会返回错误。
if('String' === typeof data.url1)
{
}
else if(check for url 2/default etc.){...}
【问题讨论】:
-
如果
data对象中没有url或url2属性,则分配不会引发异常,因此您的代码无法按预期工作。在您的情况下使用 try/catch 也很难阅读。您应该坚持测试数据对象的值(以及数据对象本身 - 如果data未定义,data.url确实会抛出)。 -
您的问题不清楚。你如何处理
backurl,data来自哪里,data也可能未定义(可能)? -
可能听起来很傻,但是你忘了
return任何东西,所以函数总是返回未定义的。要让它返回url的值,你需要有这样一行:`return url;". -
另外,在第二个捕获中,您将值分配给不同的变量“backurl”,因此即使您返回
url,也不会返回正确的值。 -
getURL函数的作用是什么?以特定顺序检查某些属性的存在并返回第一个匹配的?或者会有一些加载代码?
backurl的目的是什么?
标签: javascript try-catch