我正在研究underscore.js的源代码,发现了这个:
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
为什么要使用"!!"?它应该被理解为NOT-NOT吗,还是在这里存在一些神秘的JS细微差别?
我正在研究underscore.js的源代码,发现了这个:
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
这只是将结果转换为布尔值的一种笨拙方式。
a && b
a
和b
都为真值,将返回b
。!!(a && b)
如果a
和b
都是真值,将返回true
。
NaN
(作为假值)。 - user113716&& 运算符返回 false 或表达式中的最后一个值:
("a" && "b") == "b"
|| 运算符返回第一个被判定为真的值
("a" || "b") == "a"
逻辑非运算符返回一个布尔值
!"a" == false
如果你想将一个变量转换为布尔值,可以使用!!
var myVar = "a"
!!myVar == true
myVar = undefined
!!myVar == false
等等。
这只是两个相邻的!运算符。但是双重否定是毫无意义的,除非您像使用!!一样将其转换为布尔类型。
它将把任何东西转换为true或false...