Javascript 为什么多功能代码行不产生错误而只是停止执行?

Javascript 为什么多功能代码行不产生错误而只是停止执行?,javascript,angular,typescript,error-handling,Javascript,Angular,Typescript,Error Handling,我理解下面这行代码是可怕的编码,但我的问题是,为什么这类代码不会产生控制台错误,而只是停止执行 例如: 假设有一个名为mySessionItem的会话存储项,其值为JSON,其中包含属性myObjectProperty,则当设置会话存储项并具有有效的JSON时,执行以下代码时将起作用 let myVar = JSON.parse(sessionStorage.getItem("mySessionItem"))["myObjectProperty"] === "myValue" ? false :

我理解下面这行代码是可怕的编码,但我的问题是,为什么这类代码不会产生控制台错误,而只是停止执行

例如:

假设有一个名为
mySessionItem
的会话存储项,其值为JSON,其中包含属性
myObjectProperty
,则当设置会话存储项并具有有效的JSON时,执行以下代码时将起作用

let myVar = JSON.parse(sessionStorage.getItem("mySessionItem"))["myObjectProperty"] === "myValue" ? false : true; 
但是,如果会话存储未设置,或设置为无效JSON,或设置为有效JSON但缺少属性
myProperty
,则会出错并停止执行

这是正常的行为,也是我期望从如此糟糕的代码中得到的东西。但是,这不会产生控制台错误,这使得跟踪非常困难

这不会导致控制台错误,有什么原因吗?有什么方法可以强制它以编程方式生成一个控制台错误吗?有什么简单的方法可以跟踪类似这样的问题吗

我在一个大型团队中工作,团队成员的编码能力各不相同,当这样的事情进入代码库时,我希望找到更好的方法来跟踪它们,因为它们在大型应用程序中非常难以捉摸,到处都会造成严重破坏


作为参考,我们的团队使用Angular 2,通过Angular CLI使用TypeScript实现。我不确定这些东西中是否有一个在生成错误的错误代码中起作用,所以我想确保我强调了我们使用的工具。

您可以做一些事情,比如在Typescript中为会话对象创建一个类,然后尝试访问该属性,因为该类将始终具有该属性

> let myVar: boolean = new Session(JSON.parse(sessionStorage.getItem("mySessionItem"))).myObjectProperty === "myValue" ? false : true;
这使用了Typescript的一些类型安全特性,如果假定属性未设置或丢失,您可以控制构造函数中会话对象的情况

constructor(options: { myObjectProperty?: string } = {}){
   this.myPropertyObject = options.myPropertyObject || '';
}

我在控制台中遇到一个错误:
VM140:1未捕获的TypeError:无法读取在:1:64处为null的属性'myObjectProperty',因此可能与Angular 2、TypeScript等中的属性有关?这不是一个解决方案,但如果您放置一个
试试。。。捕捉它周围的
,并记录错误,发生了什么事?@StephenRios您是否碰巧在一个可观察的序列中有此代码?如果是这样,控制台将错误记录在subscribe函数的错误回调中。map()方法将捕获错误并将其抛出错误回调(就像try catch一样),并在该行上放置断点。当它击中它时,跨过它。它不会继续到下一行,但可能会进入一些角度代码,吞下异常。这肯定是保持这一行安全的一种方法。我很感谢大家对如何使它更安全的意见。