使用(变量类型)作为条件是否不正确?ES-lint显示出意外的恒定状态



我正在设置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进行评估。我会分解解释

  1. typeof JSON.parse(x)将返回类型(stringnumberboolean等(的字符串
  2. !SOMETHING Will 始终返回布尔值
    1. 如果 SOMETHING falsy ,则 !SOMETHING将为 true(不是false (
    2. 如果 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');
}

最新更新