【发布时间】:2016-08-07 13:46:37
【问题描述】:
假设我有一个变量condition。如果我想将它作为严格的boolean 值存储到变量中,那么我会这样做:
var logicalCondition = !!condition;
第一个感叹号否定condition 并将值转换为boolean。第二个感叹号否定了否定的严格布尔值。如果condition 为真,则结果为true,如果condition 为假,则结果为false。已知If 条件将 truey 转换为 true 并将 falsy 转换为 false。所以,如果我们看一下以下两个块
//first
if (condition) {
//do something
}
//second
if (!!condition) {
//do something
}
我们可以观察到的第一个区别是,在第二种情况下,我们将值转换为严格的boolean 值,然后再将其交给if。是否有第二个区别,或者这种转换是不必要的?
【问题讨论】:
-
没有区别。
!!是到布尔值的隐式转换,但if(condition)也采用真值/假值,并且无论哪种方式都一样 -
没有必要。
if条件测试的行为与!!的结果完全相同。 -
可能会减少 linter 的抱怨吗?像自动类型检测,它不是布尔值。
-
我只想指出,虽然
if(!!condition)是多余的,但它可以指导下一个查看代码的人condition实际上不是布尔值。因此,它具有一定的维护价值,即使性能没有差异。
标签: javascript