Ily*_*sky 4 javascript warnings boolean lint
在 if 语句中通过双重否定 (!!) 转换为布尔值是不必要的,例如,因为这些 if 语句是等价的:
if (!!foo) {
// ...
}
if (foo) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是如果通过 !! 转换为布尔值呢?是在 return 语句吗?像这儿:
nameToSomething : function(someName){
if (someName) {
return !!this._var[someVar] ? this._var: undefined;
}
return undefined;
},
Run Code Online (Sandbox Code Playgroud)
!!this._mServicesByName[someName] 作为回报是不是和this._mServicesByName[someName]这里一样?为什么?
用简单的英语解释为什么它不同/相同,以及如何在 JavaScript 中规避此规则的示例,因此我的 linter 不会“看到”它将非常感激。
提前谢谢了。
好的,自从提出这个问题后,我自己做了一些研究,实际上偶然发现了一些与 JavaScript 中的双重否定技巧非常相似的问题(附有答案)。在这里和这里我找到了一些关于双布尔否定技巧本身的必要性的解释。长话短说,这就像在 Java 中进行转换。!! 当您实际上需要返回一个布尔值而不更改 true 和 false 时,将使用表达式。它是一个非倒置的布尔值,或者简单地说,真正的布尔值表示。
例如,这个 !true 将是假的,反之亦然!false 将是真的。但是,简单地使用!!true,并!!false可以得到相同true和false不改变结果,并仍然工作,布尔。!!0存在false和!!1存在也是如此true。
现在,回到我的问题。在上面的代码片段中,我不能省略非反转布尔值,因为作为示例给出的函数需要一个布尔值。false 不能更改为 true,反之亦然。它也不能用按位运算符替换,因为在这种情况下它不起作用。不过,在保存非反转布尔值的函数上方创建一个新变量有助于使我的 linter 静音。所以这可能是解决问题的答案。
或者,或者,在 IDE 中更改“no-extra-boolean”规则的 linter 选项将是一个更好的决定)因为在 JavaScript 中,据我所知,它们经常使用,并且没有办法绕过它。这甚至不是一个坏习惯。有时,当您需要真正的布尔表示时,这是编写代码的一种非常方便的方式。而且是唯一的。
| 归档时间: |
|
| 查看次数: |
4213 次 |
| 最近记录: |