首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >双重否定(!!)在javascript中-目的是什么?

双重否定(!!)在javascript中-目的是什么?
EN

Stack Overflow用户
提问于 2012-05-06 09:50:34
回答 3查看 65K关注 0票数 155

可能重复:

What is the !! (not not) operator in 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)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-06 09:52:57

它会强制转换为布尔值。第一个!对它求反一次,像这样转换值:

  • undefinedtrue
  • nulltrue
  • +0true
  • -0true
  • ''true
  • NaNtrue
  • falsetrue
  • All其他表达式到false

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

票数 224
EN

Stack Overflow用户

发布于 2012-05-06 09:51:42

代码语言:javascript
复制
var x = "somevalue"
var isNotEmpty = !!x.length;

让我们把它分成几部分:

代码语言:javascript
复制
x.length   // 9
!x.length  // false
!!x.length // true

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

下列值等效于条件语句中的false

空字符串编号(\ '')

  • The "" 0

  • The number NaN

所有其他值都等于true。

票数 58
EN

Stack Overflow用户

发布于 2012-05-06 09:54:51

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

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

代码语言:javascript
复制
if (options.guess) {
    // runs if options.guess is truthy, 
}

但这并不一定意味着:

代码语言:javascript
复制
options.guess===true   // could be, could be not

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

代码语言:javascript
复制
!!options.guess===true   // always true if options.guess is truthy
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10467475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档