JavaScript 逻辑运算符:?
我在检查 underscore.js 的 src 并发现了这一点:
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
为什么是“!!”用过的?它应该被理解为“NOT-NOT”还是这里有一些深奥的 JS 细微差别?
I was examining the src of underscore.js and discovered this:
_.isRegExp = function(obj) {
return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};
Why was "!!" used? Should it be read as NOT-NOT or is there some esoteric JS nuance going on here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这只是将结果转换为布尔值的一种钝方法。
It is just an obtuse way to cast the result to a boolean.
是的,这不是。将值转换为等效真实性的布尔值是常用的习惯用法。
JavaScript 将
0.0
、''
、null
、undefined
和false
理解为 false,以及任何其他值(显然包括true
)作为 true。该习惯用法将所有前一个转换为布尔值false
,并将所有后一个转换为布尔值true
。在这种特殊情况下,
如果
a
和b
都为真,则返回b
;如果
a
和b
都为 true,则返回true
。Yes, it's NOT-NOT. It is commonly used idiom to convert a value to a boolean of equivalent truthiness.
JavaScript understands
0.0
,''
,null
,undefined
andfalse
as falsy, and any other value (including, obviously,true
) as truthy. This idiom converts all the former ones into booleanfalse
, and all the latter ones into booleantrue
.In this particular case,
will return
b
if botha
andb
are truthy;will return
true
if botha
andb
are truthy.&&运算符返回 false 或表达式中的最后一个值:
||运算符返回第一个计算结果为 true 的值
!运算符返回一个布尔值
因此,如果您想将变量转换为布尔值,您可以使用!!
ETC。
The && operator returns either false or the last value in the expression:
The || operator returns the first value that evaluates to true
The ! operator returns a boolean
So if you want to convert a variable to a boolean you can use !!
etc.
只不过是两个而已!操作员彼此相邻。但是双重否定是没有意义的,除非你使用 !!就像一个转换为布尔类型的运算符。
它将把任何东西转换为真或假......
It is just two ! operators next to each other. But a double-negation is pointless unless you are using !! like an operator to convert to Boolean type.
It will convert anything to true or false...