if中的变量用法和双重感叹号之间是否有任何区别?

时间:2016-08-07 13:46:37

标签: javascript

假设我有一个变量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。是否存在第二个差异,或者这种转换是否必要?

1 个答案:

答案 0 :(得分:1)

  

还有第二个区别......?

不,在JavaScript引擎级别没有。正如你所说的那样,由if完成的测试(以及需要布尔值的任何其他地方)将执行与!!正在做的相同的事情(实际上)。所以你的第一个区别(额外的工作)是唯一的区别。