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)


它转换为布尔值。 第一! 否定它一次,转换值如下:

  • undefinedtrue
  • nulltrue
  • +0true
  • -0true
  • ''true
  • NaNtrue
  • falsetrue
  • 所有其他表达式都为false
  • 然后另一个! 再次否定它。 简洁转换为布尔值,完全等同于ToBoolean,因为! 被定义为否定。 然而,这里没有必要,因为它仅用作条件运算符的条件,它将以同样的方式确定真实性。


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

    让我们分解它:

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

    所以它被用来将“truethy”“falsy”值转换为一个布尔值。


    以下值在条件语句中相当于false:

  • 空值
  • 未定义
  • 空字符串""''
  • 数字0
  • 数字NaN
  • 其他所有值都等同于true。


    双重否定将“truthy”或“falsy”值转换为布尔值, truefalse

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

    if (options.guess) {
        // runs if options.guess is truthy, 
    }
    

    但这并不一定意味着:

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

    如果你需要强制一个“truthy”值为真正的布尔值, !! 是一个方便的方法来做到这一点:

    !!options.guess===true   // always true if options.guess is truthy
    
    链接地址: http://www.djcxy.com/p/12641.html

    上一篇: Double negation (!!) in javascript

    下一篇: Double exclamation points?