Javascript逻辑运算符:?

时间:2011-06-27 22:14:25

标签: javascript operator-keyword

我正在检查underscore.js的src并发现了这个:

_.isRegExp = function(obj) {
    return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};

为什么是“!!”用过的?它应该被视为NOT-NOT还是存在一些深奥的JS细微差别?

4 个答案:

答案 0 :(得分:12)

将结果强制转换为布尔值只是一种迟钝的方式。

答案 1 :(得分:2)

是的,这不是 - 不是。它通常用于将值转换为等效真值的布尔值。

JavaScript将0.0''nullundefinedfalse理解为虚假,以及任何其他值(显然包括{{1}如同真实的那样。这个习惯用法将所有前者转换为布尔值true,后者转换为布尔值false

在这种特殊情况下,

true
如果a && b b都是真实的,

将返回a;

b
如果!!(a && b) true都是真实的,

将返回a

答案 2 :(得分:1)

&& operator返回false或表达式中的最后一个值:

("a" && "b") == "b"

|| operator返回计算结果为true的第一个值

("a" || "b") == "a"

! operator返回一个布尔值

!"a" == false

因此,如果您想将变量转换为布尔值,可以使用!!

var myVar = "a"
!!myVar == true

myVar = undefined
!!myVar == false

答案 3 :(得分:0)

这只是两个!运营商彼此相邻。但除非你使用!!否则双重否定是没有意义的!像一个转换为布尔类型的运算符。

它会将任何内容转换为true或false ......