【问题标题】:Is the !! operator even necessary in Javascript?是个 !! Javascript中甚至需要运算符?
【发布时间】:2011-12-15 22:48:32
【问题描述】:

我可以理解您希望将对象值转换为布尔值并将其保存在变量中的情况。但是,我在一个 jQuery 模板中遇到了以下代码,我想知道 !! (双感叹号)甚至是必要的。

{{if !!sectionId}}
    // do something...
{{/if}}

我假设不是因为 Javascript 会自动将 if 后面的表达式评估为布尔值。因此,您可以只写:

{{if sectionId}}
    // do something...
{{/if}}

我的假设是否正确?

【问题讨论】:

标签: javascript jquery jquery-templates


【解决方案1】:

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

! 的单个应用程序将通过评估其参数的“真实性”返回一个布尔值,并给出布尔值的逆。因此,第二个! 给出了 that 值的布尔逆,因此是原始值的布尔“真实性”。

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

someAPI( !! someExpression );

【讨论】:

  • 我意识到这一点。我最初看过这篇文章stackoverflow.com/questions/784929/…。我仍然很好奇在这种情况下是否需要使用这个实现。
  • 当代码出于某种原因真的需要一个布尔值时,它是必要的。一些 API 在函数参数列表等中显式检查布尔值而不是真值。
  • 类型安全可能是个问题,如果你想确保函数返回布尔值,强制转换可能很重要:return !!(this.foo || this.bar) 在其他语言中是不必要的,但 || 和 @ 987654331@ 实际上并不返回布尔值,它们只是返回它们遇到的第一个 truthyfalsey 值(分别)。
  • 为了补充 Pointy 的回答和评论,JavaScript 有许多真实值,除了“真”。见stackoverflow.com/questions/1995113/strangest-language-feature/…
  • 如果要转换为布尔值,使用布尔转换函数 Boolean(x); 会更清楚
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多