我打算嘗試儘可能客觀地解決這個問題,但它涉及一些糊塗的「最佳實踐」意見,可能會引發人們忘記有多種方法來做事情。
是否可以接受使用類型強制(==
代替===
)來檢查undefined
/null
?
不管別人告訴你什麼都可以,但是你認爲合適的代碼是可以接受的。包括我。
這在這裏並沒有什麼幫助,所以讓我稍微擴展一下,我會讓你決定你對此的看法。
代碼是可用於解決問題的工具,並且是==
JavaScript代碼內的工具來解決一個特定問題。它有一個well-defined algorithm,它用於檢查兩個參數之間的相等類型。
===
,在另一方面,是不同工具,解決了不同,特定問題。它還有一個well-defined algorithm,它用於檢查兩個參數之間的相等類型。
如果一個工具或其他工具適合您的使用情況,那麼您應該毫不猶豫地使用該工具。
如果您需要錘子,請使用錘子。
但是if all you have is a hammer, then everything looks like a nail,這是==
的核心問題。來自其他語言的開發人員通常不知道==
如何工作,並在===
合適時使用它。
事實上,大多數使用案例都是這樣的,===
應該優於==
,但正如您在問題中提出的那樣:在這種情況下不是這樣。
缺點是什麼?
如果你放鬆你的===
標準,並允許開發人員使用==
你很可能得到通過的==
誤用,這就是爲什麼宗教堅持===
可以接受的一些咬傷,而且似乎愚蠢的人。
if (val === null || val === undefined) {...
不是特別難寫,而且對意圖非常明確。
另外,
if (val == null) {...
更加簡潔,不難理解無論是。
是否有更好的方法來檢查undefined
/null
?
「更好」是主觀的,但我會說,「不」,無論如何,因爲我沒有意識到任何有意義的方式改善情況。
在這一點上我也注意到,有可能被執行代替null
/undefined
其他檢查。 Truthy/falsey檢查是常見的,但它們是用來解決另一個特定問題另一個工具:
if (!val) {...
是比任何以前的選項簡潔得多,但它帶有吞嚥其他falsey的行李值。通過掉毛執法
其他注意事項:
如果你遵循的Crockford's JSLint的嚴格,==
是從未的耐受性,在理解是一種工具,是「有時是有用的」,而是「主要危險」 ISN不值得冒險。
ESLint另一方面,通過提供option to allow null
作爲特定例外,允許對規則進行更寬鬆的解釋。
你想檢查兩個,或只是一個? – baranskistad
我想檢查兩個 – user2954463
這是好的主觀和壞主觀之間的邊界。我會這樣說,[eslint提供了一個可配置的設置來允許'null'檢查的異常](http://eslint.org/docs/rules/eqeqeq)。 – zzzzBov