Javascript if中的变量用法和双感叹号有什么区别吗?
假设我有一个变量Javascript if中的变量用法和双感叹号有什么区别吗?,javascript,Javascript,假设我有一个变量条件。如果我想将其作为严格的boolean值存储到变量中,那么我会这样做: var logicalCondition = !!condition; 第一个感叹号否定条件,并将值转换为布尔值。第二个感叹号将被求反的严格布尔值取反。如果条件为真,则结果为为真,如果条件为假,则结果为为假如果已知条件将truey转换为真,将falsy转换为假。那么,如果我们看一下下面的两块 //first if (condition) { //do something } //second
条件
。如果我想将其作为严格的boolean
值存储到变量中,那么我会这样做:
var logicalCondition = !!condition;
第一个感叹号否定条件
,并将值转换为布尔值
。第二个感叹号将被求反的严格布尔值取反。如果<代码>条件<代码>为真,则结果为<代码>为真,如果<代码>条件<代码>为假,则结果为<代码>为假如果已知条件将truey转换为真
,将falsy转换为假
。那么,如果我们看一下下面的两块
//first
if (condition) {
//do something
}
//second
if (!!condition) {
//do something
}
我们可以观察到的第一个区别是,在第二种情况下,我们将值转换为严格的布尔值,然后再将其交给if
。是否存在第二个差异,或者这种转换是不必要的
还有第二个区别吗
不,在JavaScript引擎级别没有。正如您所说的,if所做的测试(以及任何其他需要布尔值的地方)将做与相同的事情代码>正在执行(有效)。所以你的第一个不同点(额外工作)是唯一的不同点。没有区别<代码>
是到布尔值的隐式转换,但是如果(条件)
也接受truthy/false值,并且它以相同的方式执行,这是不必要的。if
条件测试的行为与的结果完全相同代码>。可能是linter less对此抱怨吗?就像自动类型检测一样,它不是布尔值。我只想指出,虽然if(!!condition)
是超级函数,但它可以指示下一个查看代码的人condition
实际上不是布尔值。因此,即使性能没有差异,它也有一定的维护价值。谢谢你的回答,这在提出问题之前证实了我的观点。@LajosArpad:是的,我们可以说::-)