Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript if中的变量用法和双感叹号有什么区别吗?_Javascript - Fatal编程技术网

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:是的,我们可以说::-)