我正在设置JavaScript中的REST API,需要检查参数是否为布尔值。我可以使用json.parse(varible(=='boolean'做到这一点,但是这会导致ESLINT错误(无构态条件(。我可以禁用此行的错误,但是如果有理由不这样做,我很好奇。
我已经阅读了该错误的文档。
常数表达式(例如,作为测试条件(可能是特定行为的错别字或发展触发因素。例如,以下代码看起来好像还没有准备好生产。
https://eslint.org/docs/rules/no-constant-condition
据我所知,似乎忽略了。
try {
if (!typeof JSON.parse(x) === 'boolean') {
throw new Error('x must be boolean');
}
} catch (e) {
throw new Error('x must be boolean');
}
no-constant-condition
规则正常工作。您的if语句将始终对false
进行评估。我会分解解释
-
typeof JSON.parse(x)
将返回类型(string
,number
,boolean
等(的字符串 -
!SOMETHING
Will 始终返回布尔值- 如果
SOMETHING
是 falsy ,则!SOMETHING
将为true
(不是false ( - 如果
SOMETHING
是真实,则!SOMETHING
将为false
(不正确((
- 如果
这意味着您将boolean
(类型(与string
(类型(与===
进行比较。要解决您的方案,您需要将!
((移动到评估器
try {
if (typeof JSON.parse(x) !== 'boolean') {
throw new Error('x must be boolean');
}
} catch (e) {
throw new Error('x must be boolean');
}