【问题标题】:Is using == instead of === ok for null/undefined? [duplicate]是否使用 == 而不是 === 确定 null/未定义? [复制]
【发布时间】:2020-03-17 12:27:21
【问题描述】:

我目前有一个变量可以是nullundefined。在这两种情况下,我都想离开这个功能:

if (myvar==null) return;

这工作正常,但我从我的 IDE (VS) 中检索警告,因为 == 不关心类型,而 === 关心。我知道 == 因此通常被视为不好的风格。

这是规则的例外吗?我应该忽略此警告并坚持更好的可读性还是建议采取以下措施?

if (myvar===null || myvar===undefined) return;

【问题讨论】:

  • 如果您只是检查某个值是真还是假,== 很好,但在某些情况下您需要检查一个值是否具体等于 nullundefined ,在这种情况下,您必须使用===。这种情况在使用第三方库时最常发生。但是不要为这些小事感到压力;让它工作!
  • 没有。询问您的同事是否知道正确的 == 语义...
  • "我应该忽略这个警告" 不 - change it!所有 linting 规则都是可配置的,所以我不确定为什么人们如此不愿意配置它们以满足他们的需求。
  • if (!myvar) return; 虚假
  • 在我看来,您只是在检查“虚假”值。你可以使用if (!myvar) return;

标签: javascript


【解决方案1】:

问题在于缺乏澄清。 如果您是为自己编写代码,那很好,因为您确切地知道自己在做什么。但如果贡献者找到此代码,他们可以:

  1. 不知道==null / undefined 的情况下如何工作
  2. 知道它是如何工作的,但不知道是否有意使用(如果您实际上想要同时检查nullundefined,或者您只想检查null 但使用了@ 987654327@)

代码应该是清晰的,因此您经常会发现程序员在此检查之前添加 cmets 以表明是的,他们知道自己在做什么,是的,这是故意的。

最终你厌倦了,开始使用myvar === null || myvar === undefined

它更冗长,但更清晰,不会产生误解。

我注意到的另一件事是为此类事物创建自定义功能,例如isNil(myvar) 但尽管很冗长,但我更喜欢检查这两个值。

【讨论】:

    【解决方案2】:

    == 有非常具体的规则,通常不推荐,因为这些规则不直观。如果你已经记住了与其行为相关的规则,我只会容忍使用它,就像所有其他可能不得不处理你的代码的开发人员一样(大多数人没有)。

    在这种情况下,如果anullundefineddocument.all 之一,则a == null 返回true,但不是其他4 个错误的JS 值(MDN,包括为什么文档.all 都是错误的)。所以除非你想让它匹配document.all,否则我会使用===

    此外,在所有地方使用 === 可以增加代码的一致性。

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多