我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式,像这样:!!。有人能告诉我这个接线员做什么吗?

我看到这件事的背景是,

this.vertical = vertical !== undefined ? !!vertical : this.vertical;

当前回答

!!foo两次应用一元not运算符,并用于转换为布尔类型,类似于使用一元加号+foo转换为数字,并连接空字符串“”+foo以转换为字符串。

除了这些黑客,您还可以使用与基元类型相对应的构造函数(不使用new)来显式转换值,即。,

Boolean(foo) === !!foo
Number(foo)  === +foo
String(foo)  === ''+foo

其他回答

使用逻辑not运算符两次。

这意味着!true=false和!!true=真。

a = 1;
alert(!a) // -> false : a is not not defined
alert(!!a) // -> true : a is not not defined

对于a、 它检查a是否未定义,而!!a检查变量是否已定义。

!!a与相同!(!a)。如果定义了a,则a为真!a是假的,而且!!a为真。

!! 不是运算符。这只是!操作员两次。

但使用JavaScript,应用!!在大多数情况下,将Object转换为Boolean是冗余和冗长的,因为:

值未定义或为空的任何对象,包括值为false的布尔对象,传递给有条件的陈述

示例:if({}){console.log(“{}是true”)}//logs:“{}是true”

这里有很多很棒的答案,但如果你读到这里,这帮助我“找到答案”。在Chrome(等)中打开控制台,然后开始键入:

!(!(1))
!(!(0))
!(!('truthy')) 
!(!(null))
!(!(''))
!(!(undefined))
!(!(new Object())
!(!({}))
woo = 'hoo'
!(!(woo))
...etc., etc., until the light goes on ;)

当然,这些都和仅仅打字一样!!但添加的括号可能有助于使其更易于理解。

看来是!!运算符导致双重否定。

var foo = "Hello, World!";

!foo // Result: false
!!foo // Result: true