Javascript 这是try/catch块的正确用法吗
我正在尝试使用Javascript 这是try/catch块的正确用法吗,javascript,try-catch,Javascript,Try Catch,我正在尝试使用decodeURIComponent()对可能是单百分比或双百分比编码的URL进行解码。因为我不想在尝试解码只包含%25(5)的字符串时得到“URI格式错误”,所以我使用了这个try/catch块。我是否正确使用了try/catch块?这似乎是可行的,但我试图了解这是否是一种最佳实践方法,或者我是否有过复杂的事情 var uriCleanup = function (str) { var cln = function (str) { try {
decodeURIComponent()
对可能是单百分比或双百分比编码的URL进行解码。因为我不想在尝试解码只包含%25
(5)的字符串时得到“URI格式错误”
,所以我使用了这个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);
};
您会使事情过于复杂:这里不需要使用递归
function uriCleanup(str) {
var cln = str;
try {
do {
cln = decodeURIComponent(str);
} while (cln !== str && (str = cln));
}
catch (e) {}
return cln;
}
您确实使事情过于复杂:这里不需要使用递归
function uriCleanup(str) {
var cln = str;
try {
do {
cln = decodeURIComponent(str);
} while (cln !== str && (str = cln));
}
catch (e) {}
return cln;
}
您确实使事情过于复杂:这里不需要使用递归
function uriCleanup(str) {
var cln = str;
try {
do {
cln = decodeURIComponent(str);
} while (cln !== str && (str = cln));
}
catch (e) {}
return cln;
}
您确实使事情过于复杂:这里不需要使用递归
function uriCleanup(str) {
var cln = str;
try {
do {
cln = decodeURIComponent(str);
} while (cln !== str && (str = cln));
}
catch (e) {}
return cln;
}
这不是最好的做法
try/catch
您应该使用,并且只能使用,来处理中断代码流并破坏您完成代码的能力的异常情况。如果您更广泛地使用它,您将得到一个非常强大的goto
-样的结构,在代码中使用起来非常笨拙
与if、else、while等相比,try/catch是一种更难学习的结构,因为只有在使用模块化库函数的大型代码库中工作时,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
- try/catch仅由认为可以处理异常的方法使用
- 如果没有发生异常,代码将以线性和干净的方式读取,下一行永远不必担心前一行是否成功
- 这不是最佳做法
try/catch
您应该使用,并且只能使用,来处理中断代码流并破坏您完成代码的能力的异常情况。如果您更广泛地使用它,您将得到一个非常强大的goto
-样的结构,在代码中使用起来非常笨拙
与if、else、while等相比,try/catch是一种更难学习的结构,因为只有在使用模块化库函数的大型代码库中工作时,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
- try/catch仅由认为可以处理异常的方法使用
- 如果没有发生异常,代码将以线性和干净的方式读取,下一行永远不必担心前一行是否成功
- 这不是最佳做法
try/catch
您应该使用,并且只能使用,来处理中断代码流并破坏您完成代码的能力的异常情况。如果您更广泛地使用它,您将得到一个非常强大的goto
-样的结构,在代码中使用起来非常笨拙
与if、else、while等相比,try/catch是一种更难学习的结构,因为只有在使用模块化库函数的大型代码库中工作时,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
- try/catch仅由认为可以处理异常的方法使用
- 如果没有发生异常,代码将以线性和干净的方式读取,下一行永远不必担心前一行是否成功
- 这不是最佳做法
try/catch
您应该使用,并且只能使用,来处理中断代码流并破坏您完成代码的能力的异常情况。如果您更广泛地使用它,您将得到一个非常强大的goto
-样的结构,在代码中使用起来非常笨拙
与if、else、while等相比,try/catch是一种更难学习的结构,因为只有在使用模块化库函数的大型代码库中工作时,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
- try/catch仅由认为可以处理异常的方法使用
- 如果没有发生异常,代码将以线性和干净的方式读取,下一行永远不必担心前一行是否成功
cln
的每个后续调用都创建了它们自己的try-catch作用域,这是不好的(因为它不是真正需要的)<代码>cln!==str&(str=cln)@thomas First,cln
(解码结果)与原始字符串(存储在str
中)进行比较。如果它们是相同的,没有进一步的解码改变任何东西,因此循环中断。如果不是,解码结果将存储在str
值中,循环将继续处理。谢谢,现在已经清楚了。因此,在JavaScript评估中,可以在&&
之后包含变量赋值?我知道for循环当然包含了这种声明(var i=0,len=myArray.length;iThanks。我注意到您没有删除try/catch块。您认为这样可以吗,或者有没有办法不删除它,特别是因为catch语句中没有任何操作。当然,在这种特殊情况下,这是可以的;所有其他防止讨厌的URIError的方法:格式错误的URI序列
都是更糟的是一英里。但是在您的原始代码中,cln的每个后续调用<