【问题标题】:Comparison to FALSE is equivalent to negating value. Is it a ReSharper bug?与 FALSE 的比较相当于否定值。这是一个 ReSharper 错误吗?
【发布时间】:2015-01-27 11:53:44
【问题描述】:

我正在使用 ReSharper 9 及其 TypeScript 功能。我正在写打字稿代码。我有一个这样的界面:

interface Test {
  A?: boolean;
  ...
}

然后我像这样写一个if 语句,以测试成员A 是否存在并且完全等于false。 (又名:如果它不存在,我想把它当作真的。)

if (myObj.A === false) {
  ...
}

然后 ReSharper 给了我一个提示:Comparison to False is equivalent to negating value,如果我接受修复,它就变成了

if (!myObj.A) {
  ...
}

这显然是不等价的,因为例如如果没有定义 A 则为真。

我错过了什么?在运行时真的等效吗?

【问题讨论】:

  • 不确定 Javascript/Typescript 如何处理它,但在 C# 中,!myObj.A 在语法上是不正确的,因为它不能隐式转换类型 'bool?'到“布尔”。
  • @PiersMyers 我明白你的意思,但情况完全不同。
  • 我觉得你的分析是对的。 !myObj.A 的行为与 myObj.A === false 不同。我认为 ReSharper 是错误的。
  • 这似乎仍然是一个问题。我想将布尔字段用作可为空的布尔值,但如果我精确比较真假,resharper 会一直抱怨。我想我会关掉那个警告。

标签: javascript visual-studio-2013 typescript resharper


【解决方案1】:

正如你所说,这两个比较是不等价的:

var myObj = {A: false};
myObj.A === false //true;
myObj = {};
myObj.A === false //false;
!myObj.A //true (not what you want)

因此,ReSharper 提出了不正确的建议。

【讨论】:

  • 谢谢,我只是在工作日结束时不确定自己:)
猜你喜欢
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
相关资源
最近更新 更多