JavaScript:“!!”是什么意思?

JavaScript: what is the meaning of “!!”?

本问题已经有最佳答案,请猛点这里访问。

我刚碰到这个

1
var strict = !! argStrict;

我忍不住想知道,!!的意思是什么?是双重否定吗?似乎是多余的,不太可能江户十一〔一〕的人会在这种情况下使用它?

来源:http://phpjs.org/functions/in_array/


它强制类型成为真正的布尔值,而不是"truthy"值。实例:

1
2
3
var a = (1 === true) // comes out as false because 1 and true are different types and not exactly the same

var b = ((!!1) === true) // comes out as true because the 1 is first converted to a boolean value by means of negation (becomes false) and then negated a second time (becomes true)

这是一个懒惰的解析示例。

如果您有一个变量(例如字符串),并且希望将其转换为布尔值,则可以这样做:

1
2
3
if (myString) {
    result = true;
}

这表示,如果my string未定义、为空、为0、为布尔值false,则将我的字符串设置为布尔值true…

但它更快,更酷的方式是双重打击它:

1
result = !! myString;

其他例子包括……

1
2
3
4
5
//Convert to number
result = +myString;

//Bang Bang Wiggle - coerces an indexOf check into a boolean
result !!~myString.indexOf('e');


它返回一个boolean值。false表示undefinednull0''true表示任何truthy值。


它的基本意思是"转换为布尔值"。

它否定了两次,所以它argStrict是"不稳定的",那么!argStrict是真的,!!argStrictfalse