当前位置: 首页 > 知识库问答 >
问题:

javascript中的双重否定(!!)-目的是什么?[副本]

荣沈义
2023-03-14

可能重复:
什么是错误!!(不是)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个答案

杜辉
2023-03-14

双重否定将“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

贺山
2023-03-14
var x = "somevalue"
var isNotEmpty = !!x.length;

让我们把它撕成碎片:

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

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

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

  • 错误

所有其他值都等价于true。

淳于星宇
2023-03-14

它转换为布尔型。第一个 对其求反一次,按如下方式转换值:

  • 未定义
  • nulltrue
  • 0true
  • -0true
  • '
  • NaNtrue
  • falsetrue
  • 将所有其他表达式设置为false

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

 类似资料:
  • 问题内容: 我遇到了这段代码 忍不住想知道为什么双重否定?有没有其他方法可以达到相同的效果? 问题答案: 它转换为布尔值。第一个取反一次,转换值如下: 至 至 至 至 至 至 至 所有其他表达式 然后其他人再次否定它。简明投地布尔,完全等同于ToBoolean仅仅是因为被定义为它的否定。但是,这里没有必要,因为它仅用作条件运算符的条件,条件运算符将以相同的方式确定真实性。

  • 本文向大家介绍JavaScript 双重否定(!! x),包括了JavaScript 双重否定(!! x)的使用技巧和注意事项,需要的朋友参考一下 示例 双重否定!!不是唯一的JavaScript运算符,也不是特殊的语法,而仅仅是两个否定的序列。它用于将任何类型的值转换为适当的值true或false布尔值,具体取决于它是true还是falsy。 首先否定任何值转换为false它是否truthy以及

  • 在以下代码中使用双点运算符意味着什么?

  • 本文向大家介绍ElasticSearch中的副本是什么?相关面试题,主要包含被问及ElasticSearch中的副本是什么?时的应答技巧和注意事项,需要的朋友参考一下 一个索引被分解成碎片以便于分发和扩展。副本是分片的副本。一个节点是一个属于一个集群的ElasticSearch的运行实例。一个集群由一个或多个共享相同集群名称的节点组成。

  • 本文向大家介绍什么是双重支出?相关面试题,主要包含被问及什么是双重支出?时的应答技巧和注意事项,需要的朋友参考一下 回答:双倍支出被认为是数字现金计划的潜在缺陷,因为多次使用相同的数字令牌。令牌通常由可以轻松克隆的数字文件组成。比特币用户通过在区块链上付款时等待确认来保护自己免受双重支出欺诈;随着确认的增加,交易变得不可逆转。

  • 什么是“精度”?使用float和double时,单和双有什么区别?“单精度32位IEEE 754浮点”“双精度64位IEEE 754浮点”是什么意思?