是个 !!操作员甚至在Javascript中需要?

Vin*_*ano 3 javascript jquery jquery-templates

当你想要将对象值转换为布尔值并将其保存在变量中时,我可以理解这种情况.但是,我在jQuery模板中遇到了以下代码,并想知道是否!! (双感叹号运算符)甚至是必要的.

{{if !!sectionId}}
    // do something...
{{/if}}
Run Code Online (Sandbox Code Playgroud)

我假设它不是因为Javascript会自动评估if作为布尔值后面的表达式.因此,你可以写:

{{if sectionId}}
    // do something...
{{/if}}
Run Code Online (Sandbox Code Playgroud)

我的假设是对的吗?

Poi*_*nty 8

!!JavaScript中没有运算符.只是!.您所看到的是该单个运算符的双重应用.

单个应用程序!将通过评估其参数的"真实性"返回一个布尔值,给出布尔值的反转.第二!因此给出了布尔逆值,这是这样的原始值的布尔"感实性".

就个人而言,我不会if像在你的例子中那样在一个简单的语句中使用它,但它对于可能显式检查布尔类型参数的API很方便:

someAPI( !! someExpression );
Run Code Online (Sandbox Code Playgroud)

  • 当代码出于某种原因,*真的需要一个布尔值时,这是必要的.一些API在函数参数列表等中显式检查布尔值而不是truthy值. (3认同)