我打算尝试尽可能客观地解决这个问题,但它涉及一些糊涂的“最佳实践”意见,可能会引发人们忘记有多种方法来做事情。
是否可以接受使用类型强制(==
代替===
)来检查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