与 FALSE 的比较等同于否定值.这是一个重新锐利的错误

Comparison to FALSE is equivalent to negating value. Is it a ReSharper bug?

本文关键字:一个 错误 新锐利 等同于 比较 FALSE      更新时间:2023-09-26

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

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

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

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

然后 ReSharper 给了我一个关于与 False 的比较等同于否定值的提示,如果我接受修复,它就会变成

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

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

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

正如你所说,这两个比较并不等同:

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

所以ReSharper提出了一个不正确的建议。