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

我看到这件事的背景是,

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

当前回答

我认为值得一提的是,与逻辑“与/或”组合的条件不会返回布尔值,而是在&&的情况下返回最后一次成功或第一次失败,在条件链的||的情况下,返回第一次成功或最后一次失败。

res = (1 && 2); // res is 2
res = (true && alert) // res is function alert()
res = ('foo' || alert) // res is 'foo'

为了将条件转换为真正的布尔文字,我们可以使用双重否定:

res = !!(1 && 2); // res is true
res = !!(true && alert) // res is true
res = !!('foo' || alert) // res is true

其他回答

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

var foo = "Hello, World!";

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

使用逻辑not运算符两次。

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

它将所有的东西都强制为布尔值。

例如:

console.log(undefined);   // -> undefined
console.log(!undefined);  // -> true
console.log(!!undefined); // -> false

console.log('abc');   // -> abc
console.log(!'abc');  // -> false
console.log(!!'abc'); // -> true

console.log(0 === false);   // -> false
console.log(!0 === false);  // -> false
console.log(!!0 === false); // -> true

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

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

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

!! 同时使用NOT操作两次!将值转换为布尔值并将其反转,因此使用两次,显示该值的布尔值(false或true)。这里有一个简单的例子来看看如何!!作品:

首先,您所处的位置:

var zero = 0;

那你做了!0。它将被转换为布尔值,并被计算为真,因为0是假的,因此您将得到相反的值并被转换为Boolean,因此它被计算为true。

!zero; //true

但是我们不希望值的布尔值反转,所以我们可以再次反转以获得结果!这就是为什么我们使用另一个!。

大体上使我们确定我们得到的值是布尔值,而不是假值、真值、字符串等。。。

因此,这就像在JavaScript中使用布尔函数,但将值转换为布尔值的方法更简单、更短:

var zero = 0;
!!zero; //false