它可以完成工作,但感觉丑陋且重复。有什么办法可以改善吗?另外,使用这样的 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");
}
这要看具体情况。以下是一些需要考虑的要点:
1 - 有没有一种方法可以在不抛出错误的情况下进行验证?
如果您没有像 JSON.isValid 这样的函数,我不知道您会如何做不同的事情。但对于 hex2Rgb,我很确定您可以创建一个函数来检查十六进制是否是有效值。
2 - 遵循您的代码库模式
检查使用 try/catch 进行验证在您的代码库中是否常见,最好遵循它。鉴于你的问题,我认为情况并非如此。
3 - 更容易阅读
对于我和我合作过的团队来说,使用 if/else 使代码更易于阅读...我还会考虑将这些检查包含在具有良好名称的单独私有函数中,而不是记录每个 if/else 或内联 for默认值:
String hexColor = isValid(hexColor) ? hexColor: DEFAULT_HEX_COLOR
此外不要使用裸露的例外,最好明确说明您正在捕获哪些错误。