假设我有一个变量condition
。如果我想将它作为严格的boolean
值存储到变量中,那么我会这样做:
var logicalCondition = !!condition;
第一个感叹号否定condition
并将值转换为boolean
。第二个感叹号否定了否定的严格布尔值。如果true
为真,则结果为condition
;如果false
为假,则结果为condition
。已知If
条件将truey转换为true
,将falsy转换为false
。所以,如果我们看一下以下两个块
//first
if (condition) {
//do something
}
//second
if (!!condition) {
//do something
}
我们可以观察到的第一个区别是,在第二种情况下,我们将值转换为严格boolean
值,然后再将其转换为if
。是否存在第二个差异,或者这种转换是否必要?
答案 0 :(得分:1)
还有第二个区别......?
不,在JavaScript引擎级别没有。正如你所说的那样,由if
完成的测试(以及需要布尔值的任何其他地方)将执行与!!
正在做的相同的事情(实际上)。所以你的第一个区别(额外的工作)是唯一的区别。