2017-06-23 36 views
0

我知道下面的代碼行是可怕的編碼,但我的問題是爲什麼這種類型的代碼不會產生控制檯錯誤,而只是停止執行呢?爲什麼多功能代碼行不會產生錯誤並簡單地停止執行?

實施例:

假設有稱爲mySessionItem會話存儲項,其值是JSON在它的屬性myObjectProperty,當被執行時下面的代碼將工作在會話存儲項目被設定並具有有效的JSON。

let myVar = JSON.parse(sessionStorage.getItem("mySessionItem"))["myObjectProperty"] === "myValue" ? false : true; 

但是,如果會話存儲未設置或設置爲無效的JSON,或者有效的JSON,但缺少財產myProperty,它的錯誤並中止執行。

這是正常的行爲和我期望從這樣糟糕的代碼中得到的東西。但是,這不會產生控制檯錯誤,使追蹤非常困難。

是否有一個原因,這不會導致控制檯錯誤,有沒有什麼辦法可以強制它以編程方式生成一個,有沒有簡單的方法來追蹤這樣的問題?

我在一個擁有不同編程能力成員的大型團隊中工作,並且像這樣進入代碼庫我希望找到更好的跟蹤方法,因爲他們在大型應用程序中可能相當難以理解並隨處散播破壞。

僅供參考,我們的團隊使用的是使用TypeScript通過Angular CLI實現的Angular 2。我不確定這些東西中的一個是否會在錯誤代碼中發揮作用而不會產生錯誤,所以我想確保我強調了我們正在使用的工具。

+0

我在控制檯得到一個錯誤:'VM140:1遺漏的類型錯誤:1:在無法讀取空 的特性「myObjectProperty」 64' – acdcjunior

+0

因此,也許它是與它的角度是2,TypeScript等? – StephenRios

+1

不是一個解決方案,但是如果你在它周圍放置一個'try ... catch',並且控制檯記錄錯誤,會發生什麼? – trincot

回答

1

你可以做一些事情,例如在Typescript中爲session對象創建一個類,然後嘗試訪問該屬性,因爲該類將始終具有該屬性。

> let myVar: boolean = new Session(JSON.parse(sessionStorage.getItem("mySessionItem"))).myObjectProperty === "myValue" ? false : true; 

這使用了一些打字稿的類型安全的功能,你會得到控制會發生什麼對會話對象的構造函數,如果讓我們說的屬性未設置或丟失。

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

這絕對是保持這種單線安全的一種方法。我很欣賞關於如何使它更安全的投入。 – StephenRios