我应该使用 try catch 来验证值吗?

问题描述 投票:0回答:2

它可以完成工作,但感觉丑陋且重复。有什么办法可以改善吗?另外,使用这样的 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");
}
javascript validation error-handling try-catch
2个回答
0
投票

这要看具体情况。以下是一些需要考虑的要点:

1 - 有没有一种方法可以在不抛出错误的情况下进行验证?

如果您没有像 JSON.isValid 这样的函数,我不知道您会如何做不同的事情。但对于 hex2Rgb,我很确定您可以创建一个函数来检查十六进制是否是有效值。

2 - 遵循您的代码库模式

检查使用 try/catch 进行验证在您的代码库中是否常见,最好遵循它。鉴于你的问题,我认为情况并非如此。

3 - 更容易阅读

对于我和我合作过的团队来说,使用 if/else 使代码更易于阅读...我还会考虑将这些检查包含在具有良好名称的单独私有函数中,而不是记录每个 if/else 或内联 for默认值:

String hexColor = isValid(hexColor) ? hexColor: DEFAULT_HEX_COLOR

此外不要使用裸露的例外,最好明确说明您正在捕获哪些错误。


0
投票

我认为这是非常主观的,我个人不会考虑使用 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 */ }

© www.soinside.com 2019 - 2024. All rights reserved.