提问人: 提问时间:9/1/2023 更新时间:9/1/2023 访问量:49
我应该使用 try catch 来验证值吗?
Should I use try catch to validate a value?
问:
它完成了这项工作,但感觉丑陋且重复。有什么方法可以改进它吗?另外,使用这样的 try catch 来检查值是否有效是否被认为是好的做法?
function readJson(key, fallback) {
localStorage.getItem(key) ??
localStorage.setItem(key, fallback);
try {
return JSON.parse(localStorage.getItem(key));
} catch {
localStorage.setItem(key, fallback);
return JSON.parse(localStorage.getItem(key));
}
}
try {
// using hex2Rgb only to check if localStorage.getItem(hexColor) has valid value
hex2Rgb(localStorage.getItem(hexColor));
setColor(localStorage.getItem(hexColor));
} catch {
setColor("#000000");
}
答:
0赞
Juliano Negri
9/1/2023
#1
这取决于具体情况。以下是一些需要考虑的要点:
1 - 有没有办法在不抛出错误的情况下进行验证?
如果你没有像 JSON.isValid 这样的函数,我看不出你会如何以不同的方式做到这一点。但是对于 hex2Rgb,我很确定您可以创建一个函数来检查十六进制是否为有效值。
2 - 遵循代码库模式
检查使用 try/catch 进行验证是否在代码库中很常见,最好遵循它。鉴于你的问题,我认为情况并非如此。
3 - 更易于阅读
对于我和我合作过的团队来说,使用 if/else 使代码更易于阅读......我还会考虑将这些检查包含在具有良好名称的单独私有函数中,而不是记录每个 if/else 或内联默认值:
String hexColor = isValid(hexColor) ? hexColor: DEFAULT_HEX_COLOR
此外,不要使用裸露的例外,最好明确指出您正在捕获的错误。
0赞
Jarmo T
9/1/2023
#2
我认为这是非常主观的,就我个人而言,我不会考虑使用 try/catch 来验证 JSON,这是一种不好的做法。
这里有一个关于JSON验证的更深入的讨论(以及可能的答案)。
如果有的话,也许我会考虑使用更直观的布尔语法:
function isValidJSON(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
if(isValidJson(localStorage.getItem(key)))
{
/* Valid JSON */
}
else
{
/* Not a valid JSON */
}
评论