JavaScript 中的双重否定 (!!) - 目的是什么?

新手上路,请多包涵

可能重复:

是什么 !! (不是不是)JavaScript 中的运算符?

我遇到过这段代码:

 function printStackTrace(options) {
    options = options || {guess: true};
    var ex = options.e || null, guess = !!options.guess;
    var p = new printStackTrace.implementation(), result = p.run(ex);
    return (guess) ? p.guessAnonymousFunctions(result) : result;
}

我不禁想知道为什么双重否定?还有其他方法可以达到同样的效果吗?

(代码来自 https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js。

原文由 Eran Medan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 745
2 个回答

它转换为布尔值。第一个 ! 否定它一次,像这样转换值:

  • undefinedtrue
  • nulltrue
  • +0true
  • -0true
  • ''true
  • NaNtrue
  • falsetrue
  • 所有其他表达式为 false

然后另一个 ! 再次否定它。对布尔值的简洁转换,完全等同于 ToBoolean 只是因为 !定义为它的否定。不过,这里没有必要,因为它仅用作条件运算符的条件,它将以相同的方式确定真实性。

原文由 Ry- 发布,翻译遵循 CC BY-SA 3.0 许可协议

var x = "somevalue"
var isNotEmpty = !!x.length;

让我们把它分解成碎片:

 x.length   // 9
!x.length  // false
!!x.length // true

所以它用于将“真实”“虚假”值转换为布尔值。


以下值等同于 条件语句 中的 false :

  • 错误的
  • 无效的
  • 不明确的
  • 空字符串 "" (\ '' )
  • 数字 0
  • 数 NaN

所有 其他值都等同于 true。

原文由 gdoron is supporting Monica 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题