gpt4 book ai didi

javascript - 在检查 undefined/null 时可以使用类型强制吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:07:10 27 4
gpt4 key购买 nike

是否可以使用类型强制(== 而不是 ===)来检查未定义/空值?

缺点是什么?有没有更好的方法来检查 undefined/null?

澄清:我正在寻找一个将同时检查未定义和空值的语句。

test(null);
test(undefined);

function test(myVar) {
if (myVar != undefined) {
alert('never gets called')
}
}

最佳答案

我将尝试尽可能客观地解决这个问题,但它涉及一些模糊的“最佳实践”观点,这些观点可能会让人们忘记有不止一种方法可以解决问题做事。

Is it acceptable to use type coercion (== instead of ===) to check for undefined/null?

您可以按照自己认为合适的方式编写代码,无论别人是否反对您。包括我。

这在这里并没有太大帮助,所以让我稍微扩展一下,然后让您决定您的感受。

代码是一种可以用来解决问题的工具,而==是JavaScript代码中用来解决特定问题的工具。它有一个 well-defined algorithm它遵循检查两个参数之间的相等性类型。

另一方面,

=== 是一种不同工具,可以解决不同特定问题。它还有一个 well-defined algorithm它遵循检查两个参数之间的相等性类型。

如果一种或另一种工具适合您的用例,那么您应该毫不犹豫地使用该工具。

如果您需要锤子,请使用锤子。

但是if all you have is a hammer, then everything looks like a nail ,这是 == 的核心问题。来自其他语言的开发人员通常不知道 == 的工作原理,并在 === 合适的时候使用它。

事实上,大多数用例都是 === 应该优先于 ==,但正如您在问题中所问的那样:在这个例子。

What are the downsides?

如果您放宽对=== 的标准并允许开发人员使用==,您很可能会被误用==,这就是为什么虔诚地坚持 === 对某些人来说可能是可以接受的,而对其他人来说似乎是愚蠢的。

if (val === null || val === undefined) {...

不是特别难写,而且意图非常明确。

或者,

if (val == null) {...

更简洁,也不难理解。

Is there a better way to check for undefined/null?

“更好”是主观的,但我还是要说“不”,因为我不知道有任何有意义的方式可以改善情况。

在这一点上,我还会注意到可以执行其他检查而不是 null/undefined。 Truthy/falsey 检查很常见,但它们是用于解决另一个特定问题的另一种工具:

if (!val) {...

比前面的任何一个选项都简洁得多,但是它带有吞下其他错误值的包袱。


关于通过 linting 执行的附加说明:

如果你严格遵守Crockford's JSLint , ==从不 容忍的,因为理解“有时有用”但“大部分时间都很危险”的工具不值得冒险。

ESLint ,另一方面,通过提供 option to allow null 允许对规则进行更自由的解释。作为一个特定的异常(exception)。

关于javascript - 在检查 undefined/null 时可以使用类型强制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39601438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com