【发布时间】:2019-02-13 06:38:27
【问题描述】:
我最近阅读了一些代码,它使用!! 将变量转换为布尔值,以便在 if 语句中进行评估。这对我来说似乎有些多余,因为无论如何都会评估变量的布尔值。这样做有什么性能优势,还是为了更好的浏览器支持?
示例代码:
var x = 0;
var atTop = x===window.scrollY;
if(!!atTop){
alert("At the top of the page.");
}
编辑:
对于非布尔类型的操作数,我也看到了这一点,但我一直认为使用 if 无论如何都会评估变量的布尔值,因为 Javascript 中的所有值要么是“真”,要么是“假” .
示例代码:
var x = 1;//or any other value including null, undefined, some string, etc
if(!!x){//x is "truthy"
//wouldn't using if(x) be the same???
console.log("something...");
}
【问题讨论】:
-
@csmckelvey:不是那个问题的重复。这个问题是:如果操作数已经是布尔值,还有什么理由使用
!!? -
@csmckelvey 我知道
!!做了什么(将变量转换为布尔值),但我想问是否有任何理由在 if 语句中使用它。 -
这样做有什么性能优势还是为了更好的浏览器支持?。两者都不。将虚假/真实值转换为布尔值基本上是一个巧妙的技巧。在您的具体示例中,尽管
atTop已经是一个布尔值,因此无需使用它。 -
在 if 语句中,没关系。但是当您在节点中准备 JSON 以发送到浏览器时会很有帮助,反之亦然。