javascript - 使用 [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' || === 是的,检查,但如果可能的话,我仍然希望回答我原来的问题。
解决方案
if (condition === true || condition === 'true')
读作“值是true
或一个字符串表示‘真’ ”。这就是你想要做的。这只是一个观点,但我相信在尝试读取代码时,最重要的是它读取它的行为方式。
[true, 'true'].includes(someVariable)
读作“这个数组包含我们的值”。这并不难理解,但对我来说一点也不自然。这不是通常用于此目的的片段代码,并且可能会使您的同事在一瞬间阅读代码时绊倒。
最后,我认为理想情况下,您应该确保尽快清理数据,并允许更深层次的处理代码对其内容做出一些合理的假设,而不是像这个问题所涉及的那样进行测试。假设对程序员和 CPU 都有好处。
推荐阅读
- sql - 从另一个表中选择配置单元中具有最大日期的数据
- code-snippets - 如何在 lilypond 上制作带有箭头的交叉五线谱琶音
- python - python命令保存在变量中
- javascript - 如何创建自定义表单所需的错误文本而不在我的注册表单中添加多余的代码?
- arrays - arr.sort(key=lambda x: (x[0],-x[1])) 是什么意思?
- php - 如何添加颜色和尺寸的总库存 (PHP)
- r - 在 R 中为各种值拟合线性模型
- javascript - 如何使用javascript访问对象?
- python - 使用多个顶级域时烧瓶 host_matching 和静态文件
- android - 停止在 @Inject 注释之间添加换行符