javascript - 如何让 JavaScript 代码更防弹?

标签 javascript web typescript

我有编译语言背景 (C/C++/Objective-C),目前正在用 JavaScript 编写一个成熟的应用程序。 (实际上是 TypeScript,但我的问题对两者都是一样的。)

我遇到的问题是,如果出现一个错误,整个执行流程就会停止。例如,如果我有:

myFunction()
{
    doSomethingA();
    doSomethingB();
    doSomethingC();
}

然后如果 doSomethingA() 有这样的东西:

var myValue = window.myData.myValue;

但当时“窗口”上不存在“myData”,然后所有代码停止执行... doSomethingB() 和 doSomethingC() 不执行,并记录控制台错误。这对于简单的网页来说可能没问题,但我正在创建一个应用程序,它不需要莫名其妙地“停止工作”。

当然,我可以使用 try/catch 来“意识到”这个错误,但这仍然不能解决我的问题:我想以某种方式编写代码,使 doSomethingB() 和 doSomethingC() 继续执行,即使出现问题。 但是,这是对我的代码的过度简化。想象一下有很多这样的功能。用自己单独的 try/catch block 包围每个是不切实际的。即使我这样做了,我也需要给定函数的其余部分继续执行,即使第一部分中的某些部分失败了也是如此。

当然,我可以使用以下方法“保护”我的变量:

if ( typeof window.myData != "undefined")

if (window.myData.hasOwnProperty("myValue")

但是如果你有多个级别要检查,那会变得非常困惑,比如在访问时:

var myValue = window.myData.something.anotherLevel.somethingElse.value;

现在,在“安全”访问该值之前,我必须检查 myData、something、anotherLevel 和 somethingElse 是否都有效。这会导致代码非常难看。

有没有更好的方法让我的代码更“防弹”?如果某个属性意外丢失,我需要代码在问题陈述之后继续执行。如果不“保护”访问数据的每一个语句,即使有很小的机会未定义,这是否可能?

最佳答案

JavaScript 就是这样。它不是强类型语言。您有正确的方法检查虚假/未定义。您可以查看实用程序库,例如 Lodash 的 isUn​​defined() 方法,以帮助减轻痛苦。它们有很多辅助方法,例如检查对象类型、数组、对象字面量等。

https://lodash.com/docs#isUndefined

关于javascript - 如何让 JavaScript 代码更防弹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954999/

相关文章:

javascript - 浏览器使用错误路径加载 Typescript js.map 文件

TypeScript 编译器变慢了?

javascript - YTPlayer 背景视频不自动播放

javascript - 覆盖 window.fetch 原型(prototype),它添加自定义 header

tomcat - POST 请求时 doGet 中的 Servlet 错误

java - 使用 Apache Poi 生成批量 excel 文件时出现套接字异常

javascript - 传递链接数

Javascript Animate 无法工作

javascript 意外标记 }

reactjs - 我的点击处理程序在 React 中使用不同的值触发两次