gpt4 book ai didi

Javascript 比较 == null 替代品

转载 作者:行者123 更新时间:2023-11-29 19:30:11 25 4
gpt4 key购买 nike

在 JavaScript 代码中,我想替换以下 if 语句的双等号结构:

if( name == null ) {
//do stuff
}

jshint 规则“eqeqeq”的双等号失败,建议用三等号替换双等号。暂时,让我们想象一下,上面的代码从 == null 更改为 === null,如下所示:

if( name === null ) {
//do stuff
}

这适用于显式定义的值为 null 的变量,但不幸的是,对于任何未设置的变量都会失败。

var a = null; // works correctly
var b; // will fail in comparison

以前,当三等号规则对我很重要时,我会执行以下操作

if( name === null ||| typeof(name) === 'undefined' )

但我觉得这非常臃肿。

我现在能想出的最好的选择是使用 if 语句的性质,让它计算出一个假表达式,就像这里我否定表达式并简单地删除 == null部分:

if( !name ) {
//do stuff
}

对我来说,这更简单、更容易阅读,并且完全避免了显式的相等比较。但是,我不确定这里是否遗漏了任何边缘原因?

所以问题是,我可以用否定表达式 if 语句替换 == null 吗?如果是这样,它不起作用的陷阱和异常(exception)是什么?它适用于一般数组项、字符串、对象属性吗?

我选择解决方案的标准是

  • 干净的代码
  • 易于阅读和快速理解
  • 验证 jshint 规则
  • 适用于现代浏览器(截至 2015 年 1 月撰写)

我知道要讨论的其他稍微相关的问题 difference in the equality operators == vs === ,但这仅仅是为了讨论与 if 语句中的 null-ish 相比的评估。

最佳答案

So the question is, can I generally replace == null with the negated expression if statements?

可能不是普遍,不,但也许在某些地方。

If so, what are the pitfalls and exceptions where it wouldn't work? Does it work for general array items, strings, object properties?

!value 检查将为 所有 的假值,而不仅仅是 nullundefined .完整列表为:nullundefined0""NaN ,当然还有 false

所以如果你有 name = "" 那么

if (!name) {
// ...
}

...将评估为 true 并进入 block ,您之前的

if (name == null) {
// ...
}

...不会。所以到处都这样做可能会带来问题。

但是对于您确实想要在任何虚假值上进行分支的情况,!value 非常方便。例如,如果变量是 undefined(或 null)或对象引用,我将使用 if (!obj)来测试一下,因为任何错误的值对我来说都足够了。

如果你想继续使用 JSHint 的 === 规则,你可以给自己一个实用函数:

function isNullish(value) {
return value === null || typeof value === "undefined";
}

函数调用的开销没有什么值得远程担心的(more),如果它在热点中,任何体面的 JavaScript 引擎无论如何都会内联它。

关于Javascript 比较 == null 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250090/

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