首页 > 解决方案 > 使用 [true, 'true'].includes(someVariable) 检查值是否为真有缺点吗?

问题描述

在我们的系统中,我们不能总是确定一个参数是作为字符串还是作为布尔值给出的(动态类型啊hoi!),因此,例如,如果我们想检查某个标志是否被传递为真(所以要么是布尔真,要么是布尔值) string 'true'),我们通常使用以下选项之一来检查它:

if (condition + '' === 'true')

由于隐式类型转换,我不喜欢

if ({true: true, 'true': true}[condition])

我不喜欢它,因为它阅读起来相当复杂。

if (condition === true || condition === 'true')

这对我来说看起来有些难看,而且有一种古老的感觉。

因此,因为我想考虑所有选项:使用此变体是否有缺点:

[true, 'true'].includes(someVariable) 

(除了它是一种尤达条件)

编辑:为了完成,这里有更多方法可以检查我想要做什么:

if (condition.toString() === 'true')

if (String(condition) === 'true')

我想我会坚持常规 === 'true' || === 是的,检查,但如果可能的话,我仍然希望回答我原来的问题。

标签: javascriptnode.jsecmascript-6

解决方案


if (condition === true || condition === 'true')读作“值是true或一个字符串表示‘真’ ”。这就是你想要做的。这只是一个观点,但我相信在尝试读取代码时,最重要的是它读取它的行为方式。

[true, 'true'].includes(someVariable)读作“这个数组包含我们的值”。这并不难理解,但对我来说一点也不自然。这不是通常用于此目的的片段代码,并且可能会使您的同事在一瞬间阅读代码时绊倒。

最后,我认为理想情况下,您应该确保尽快清理数据,并允许更深层次的处理代码对其内容做出一些合理的假设,而不是像这个问题所涉及的那样进行测试。假设对程序员和 CPU 都有好处。


推荐阅读