我尝试使用decodeURIComponent()
解码可能是单个或双百分比编码的网址。因为我不想在尝试解码只包含"URI malformed"
(5)的字符串时获得%25
,所以我使用此try/catch
块。我是否正确使用了try/catch
块?它似乎有效,但我试图了解这是一种最佳实践方法,还是我过度复杂的事情。
var uriCleanup = function (str) {
var cln = function (str) {
try {
str = decodeURIComponent(str);
//try to decode the URI again
return cln(str);
} catch (e) {
//if error thrown, URI contains single percent symbol
//return the str as it was the last time it was decoded
return str;
}
};
return cln(str);
};
答案 0 :(得分:2)
你做的事情过于复杂:这里不需要使用递归。
function uriCleanup(str) {
var cln = str;
try {
do {
cln = decodeURIComponent(str);
} while (cln !== str && (str = cln));
}
catch (e) {}
return cln;
}
答案 1 :(得分:1)
这不是最佳做法。 try/catch
您应该使用,并且仅使用它来处理中断代码流并破坏您完成代码的能力的异常情况。如果你更普遍地使用它,最终会得到一个非常强大的goto
类结构,在你的代码中使用起来很笨重。
与if,else,while等相比,try / catch是一个更难学习的结构,因为只有你在具有模块化库函数的大型代码库中工作才真正有意义。
一个简单的例子可能是函数
var saveOrder = function(order) {
if(!order.confirmed) {
throw new Error("Please confirm you order.");
}
saveToMySQL(order);
};
//... somewhere else
try {
order = getOrderFromUser();
saveOrder(userOrder);
alert("Thank you for your order, continue shopping?");
}
catch(err) {
alert(err);
}
这里的要点是
saveOrder
因为无法继续