在 Web 開發領域,我們經常面臨乍看之下似乎很簡單的挑戰,但很快就會變成複雜的難題。最近,我在 Angular 專案中經歷了一次有趣的經歷,它提醒我在 TypeScript 中評估布林條件時精確度的重要性。我想與您分享這個教訓,希望它能幫助您避免相同的陷阱。
在我的 Angular 專案中,我遇到了涉及四個布林變數的情況。在這四個中,兩個依賴通過可觀察的來自後端的非同步資料。目標很簡單:只有當這兩個特定變數為假時,條件才應為真。
最初,我選擇了一種對我來說似乎合乎邏輯且簡潔的方法:
if (terrainPret && arbitreArrive && !equipeLocaleAbsente && !equipeVisiteuseAbsente) { // Commencer le match }
這種方法看起來很優雅:使用感嘆號(!)是為了確保非同步變數為 false。然而,我很快就發現這個方法隱藏著一個微妙的陷阱。
當我意識到我的程式碼沒有按預期運行時,問題就出現了。經過進一步調查,我意識到我忽略了 TypeScript 中布爾求值的一個關鍵方面。
在 TypeScript 中,有幾個值被認為是“falsy”,也就是說,它們在布林上下文中被評估為 false。這些值包括:
就我而言,非同步變數在從後端接收值之前可能是未定義的。因此,例如,條件 !equipeLocaleAbsente 不僅在變數為 false 時為 true,而且在變數未定義時也為 true。
為了解決這個問題,我必須更明確地表達我的情況:
if (terrainPret && arbitreArrive && equipeLocaleAbsente === false && equipeVisiteuseAbsente === false) { // Commencer le match }
這種方法確保非同步變數明確為假,而不僅僅是「假」值。
此解決方案有幾個優點:
這段經歷提醒我程式碼中精確性和清晰度的重要性,尤其是在處理非同步操作和布林求值時。它還強調需要了解我們使用的語言的細微差別。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3