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