Javascript 使用[true,';true';]includes(someVariable)检查值是否为true是否有缺点?
在我们的系统中,我们无法始终确定参数是以字符串形式给出还是以布尔值形式给出(动态键入ahoi!),因此,如果我们想检查某个标志是否被传递为true(因此布尔值true或字符串“true”),我们通常使用以下选项之一进行检查:Javascript 使用[true,';true';]includes(someVariable)检查值是否为true是否有缺点?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,在我们的系统中,我们无法始终确定参数是以字符串形式给出还是以布尔值形式给出(动态键入ahoi!),因此,如果我们想检查某个标志是否被传递为true(因此布尔值true或字符串“true”),我们通常使用以下选项之一进行检查: if (condition + '' === 'true') 我不喜欢它,因为它是隐式的类型转换 if ({true: true, 'true': true}[condition]) 我不喜欢,因为它读起来很复杂 if (condition === true || co
if (condition + '' === 'true')
我不喜欢它,因为它是隐式的类型转换
if ({true: true, 'true': true}[condition])
我不喜欢,因为它读起来很复杂
if (condition === true || condition === 'true')
在我看来有点难看,而且有一种古老的感觉
<> P>因为,<>强>我想考虑所有选项>:使用这个变体是否有缺点:
[true, 'true'].includes(someVariable)
(除了有点像尤达的情况)
编辑:为了完成,这里有更多的方法来检查我想做什么:
if (condition.toString() === 'true')
if (String(condition) === 'true')
我想我会坚持使用常规的=='true'| |====true,检查,但如果可能的话,我仍然想回答我原来的问题。如果(条件===true | |条件=='true')
读作“Value istrue
或表示“true”的字符串。这就是你想要做的。这只是一个观点,但我相信在尝试代码可读性时,最重要的是它以其行为方式读取
[true,'true'].包含(someVariable)
读作“此数组包含我们的值”。这不难理解,但我一点也不自然。这不是一个通常用于此目的的片段代码,可能会让您的同事在阅读代码的瞬间绊倒
最后,我认为理想情况下,您应该确保尽快对数据进行清理,并允许更深层的处理代码对其内容做出一些合理的假设,而不是像这个问题所涉及的那样将其挤满测试。假设对程序员和CPU都有好处。CPU
当调用率较低时,与所有其他方法相比,其缺点(如果有的话)不值得考虑
但是,如果以非常高的频率检查该条件,并且它所消耗的每个cpu周期都会产生影响,那么我不认为遍历数组来检查truthy是最好的选择
可读性
当程序员的眼睛在遍历函数时,简单的真实性检查是否值得特别注意和思考是另一个问题。这句话中的拼写错误可能不会立即被发现,这是有原因的。这些都是代码中一些熟悉的语句不应该被完全阅读以理解发生了什么的原因
if(condition===true | | condition===true')
这是最清晰的一个。我认为String(condition)===true”
更简单。@GrafiCode是的,但他们不是这样问的。尽管我不确定为什么传入参数时不能确保参数是布尔值。当然,这有点困难,因为你必须追踪所有呼叫地点并修改它们,而不是仅仅修改被呼叫的内容,但如果你从未解决这个问题,它将始终存在。tbh,我可能会运行一个项目范围的替换,将“true”
转换为true
“mistkaes”在德语中可以翻译为“屎奶酪”:-D.谢谢你的回答!