我应该如何彻底检查JavaScript中可能的错误?

我应该如何彻底检查JavaScript中可能的错误?,javascript,validation,error-handling,Javascript,Validation,Error Handling,我很难理解我通常应该在多大程度上检查和验证我在代码中操作的数据。这里我甚至没有说用户输入数据,我只是说我自己的数据,我知道的数据结构。例如,我可能有如下一些基本功能: let someData = [object]; someFunction(newData) { let newSet = newData.frequency[0]; someData.dataset.chart.data[0].frequency = newSet; } let someData = [object]

我很难理解我通常应该在多大程度上检查和验证我在代码中操作的数据。这里我甚至没有说用户输入数据,我只是说我自己的数据,我知道的数据结构。例如,我可能有如下一些基本功能:

let someData = [object];

someFunction(newData) {
  let newSet = newData.frequency[0];
  someData.dataset.chart.data[0].frequency = newSet;
}
let someData = [object];

someFunction(newData) {
  let newSet = typeof newData === "object" &&
               newData.frequency ?
               newData.frequency[0] : undefined;
  let oldSet = typeof someData === "object" &&
               someData.dataset &&
               someData.dataset.chart &&
               someData.dataset.chart.data && 
               someData.dataset.chart.data[0] ?
               someData.dataset.chart.data[0].frequency : undefined;
  // Since using length on undefined will lead to an error, I've to check the type too
  if (Array.isArray(newSet) && newSet.length === 5 && oldSet) {
    oldSet = newSet;
  } else {
    throw Error("Dataset update has failed.");
  }
}
假设我有一个图表使用的数据变量,然后我还有一个函数,它用一个新的数据更新图表数据。新数据来自我的数据库(当用户调整过滤器并应用它们时),someData是默认的,每个人都可以看到的初始数据。现在,我的问题是。。。我预见到以下事件:

  • 有人可能会使用开发人员控制台更改某些数据,因此此变量将不再包含对象,或者在代码中没有我要处理的属性,因此它将导致错误并完全破坏我的逻辑

  • 有人可能会直接调用某个函数(再次使用控制台),将非常随机的数据作为参数,这同样会导致错误

  • 可能由于我这边的一些错误或其他原因,从DB接收到的新数据会有些错误,或者初始someData初始化失败(因为它也是通过函数初始化的,并且依赖于第三方.JS文件,有一天也可能无法加载)

  • 我甚至不确定我是否预见到了所有可能发生的事情。因此,我的代码从您上面看到的变成了一些“乏味”(在我看来)的东西,如下所示:

    let someData = [object];
    
    someFunction(newData) {
      let newSet = newData.frequency[0];
      someData.dataset.chart.data[0].frequency = newSet;
    }
    
    let someData = [object];
    
    someFunction(newData) {
      let newSet = typeof newData === "object" &&
                   newData.frequency ?
                   newData.frequency[0] : undefined;
      let oldSet = typeof someData === "object" &&
                   someData.dataset &&
                   someData.dataset.chart &&
                   someData.dataset.chart.data && 
                   someData.dataset.chart.data[0] ?
                   someData.dataset.chart.data[0].frequency : undefined;
      // Since using length on undefined will lead to an error, I've to check the type too
      if (Array.isArray(newSet) && newSet.length === 5 && oldSet) {
        oldSet = newSet;
      } else {
        throw Error("Dataset update has failed.");
      }
    }
    

    即使这样,也不能保证数据的新闻集就是我希望看到的数据,因为可能我在寻找[1,2,3,4,5],用户通过他的控制台插入[“a”、“b”、“c”、“d”、“e”]等等。我觉得我可以无休止地改进它,它永远不会是防弹的,而且最终它开始变得复杂,无法理解我自己的代码,我唯一想做的就是用新数据更改旧数据。在这一点上,我觉得我做错了。编码需要更多的时间,我甚至不确定我是否做得很好,但同时我感觉不到什么时候停止验证我的代码是有限制的。请告知。

    我只会坚持用户输入验证。除此之外,如果他们想用开发工具把事情搞糟,那就是他们的问题。不管怎样,那些人只会站在他们这边

    重要的是服务器上的验证。客户端输入验证只是为了在处理之前确保普通用户放置的所有内容都没有错误。它还可以保存无用的发送到服务器。服务器必须重新进行验证,因为这些人被搞砸了