为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2019-12-16 10:58:30
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)
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

它转换为布尔值。第一个取反!一次,转换值如下:

  • undefined 至 true

  • null 至 true

  • +0 至 true

  • -0 至 true

  • '' 至 true

  • NaN 至 true

  • false 至 true

  • 所有其他表达式 false

然后另一个!再次否定它。简明投地布尔,完全等同于ToBoolean仅仅是因为!被定义为它的否定。但是,这里没有必要,因为它仅用作条件运算符的条件,条件运算符将以相同的方式确定真实性。


查看完整回答
反对 回复 2019-12-16
?
MYYA

TA贡献1868条经验 获得超4个赞

var x = "somevalue"

var isNotEmpty = !!x.length;

让我们把它分解成碎片:


x.length   // 9

!x.length  // false

!!x.length // true

因此,它用于将“ truethy” \“ falsy”值转换为布尔值。


以下值与条件语句中的 false等效:


空值

未定义

空字符串""(\ '')

数字0

数量NaN

所有其他值都等于true。


查看完整回答
反对 回复 2019-12-16
?
慕少森

TA贡献2019条经验 获得超9个赞

双重否定将“真实”或“虚假”值转换为布尔值true或false。


大多数人都熟悉使用真实性作为测试:


if (options.guess) {

    // runs if options.guess is truthy, 

}

但这并不一定意味着:


options.guess===true   // could be, could be not

如果您需要将“真实”值强制为真实的布尔值,这!!是一种方便的方法:


!!options.guess===true   // always true if options.guess is truthy


查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 484 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信