与 FALSE 的比较等同于取反值。这是 ReSharper 错误吗?
Comparison to FALSE is equivalent to negating value. Is it a ReSharper bug?
我正在使用 ReSharper 9 及其 TypeScript 功能。我正在写打字稿代码。我有一个这样的界面:
interface Test {
A?: boolean;
...
}
然后我写了一个这样的if
语句,来测试成员A
是否存在并且正好等于false
。 (又名:如果它不存在,我想把它当作真的。)
if (myObj.A === false) {
...
}
然后 ReSharper 给了我一个关于 Comparison to False is equivalent to negative value 的提示,如果我接受修复,它就变成了
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 提出的建议不正确。
我正在使用 ReSharper 9 及其 TypeScript 功能。我正在写打字稿代码。我有一个这样的界面:
interface Test {
A?: boolean;
...
}
然后我写了一个这样的if
语句,来测试成员A
是否存在并且正好等于false
。 (又名:如果它不存在,我想把它当作真的。)
if (myObj.A === false) {
...
}
然后 ReSharper 给了我一个关于 Comparison to False is equivalent to negative value 的提示,如果我接受修复,它就变成了
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 提出的建议不正确。