!!运算符显然很有用,因为它强制检查不是布尔值的东西作为布尔值 - 那是“真”条件。
但是假的呢?需要用吗!!!?
一个!
就足够了:)
!1 // false
!0 // true
!!
本身不是运算符;它只是一种使用 JavaScript 的逻辑 NOT ( !
) 运算符的方式。
转换x
为布尔值是!!x
有效的,因为当你两次否定一个布尔值时,你会得到原始的布尔值,并在否定它之前!x
转换x
为布尔值。
同样,!!!x
转换x
为布尔值并取反三次,相当于只取反一次。所以你可以使用!x
而不是!!!x
.
那是“真”条件。
不,这是为了任何价值。!!
将转换其等效布尔值中的任何值。
为什么?因为 not 运算符只是返回相反的布尔值。所以
0 // is falsy
!0 // -> true
!!0 // -> false
'foo' // is truthy
!'foo' // -> false
!!'foo' // -> true
任何其他应用程序只会再次切换该值。因此!!!
等价于!
和!!!!
等价于!!
等等。
var boolCheck = 0;
boolCheck //0
!boolCheck //true
!!boolCheck //false
!!!boolCheck //true - again
同样的事情:
var boolCheck = 1;
boolCheck //1
!boolCheck //false
!!boolCheck //true
!!!boolCheck //false - again
没有理由使用这个(!!!),这是一个重言式。!!在以下情况下很有用:
这完美地回答了你的问题https://stackoverflow.com/a/264037/1561922
!!!x 可能正在反转布尔转换 !!x:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
“任何不为空的字符串都将评估为真”
所以!!!"false"; // == false
这个问题不是开玩笑。Node.js(5 天前下载)在 Assert.js中使用了这个,例如:
function ok(value, message) {
if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;
编辑:我认为他们这样做是出于习惯的代码可读性原因,因为!value 已经足够了。
编辑:节点改变了它。我不知道为什么我 5 天前下载的 Node.js 版本仍然使用 !!!value 而不是 GitHub 中的 !value。
编辑:这就是为什么.