JavaScript 逻辑运算符:?

发布于 2024-11-17 08:01:21 字数 270 浏览 3 评论 0原文

我在检查 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

感情废物 2024-11-24 08:01:21

这只是将结果转换为布尔值的一种钝方法。

It is just an obtuse way to cast the result to a boolean.

淑女气质 2024-11-24 08:01:21

是的,这不是。将值转换为等效真实性的布尔值是常用的习惯用法。

JavaScript 将 0.0''nullundefinedfalse 理解为 false,以及任何其他值(显然包括 true)作为 true。该习惯用法将所有前一个转换为布尔值 false,并将所有后一个转换为布尔值 true

在这种特殊情况下,

a && b

如果 ab 都为真,则返回 b

!!(a && b)

如果 ab 都为 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 and false as falsy, and any other value (including, obviously, true) as truthy. This idiom converts all the former ones into boolean false, and all the latter ones into boolean true.

In this particular case,

a && b

will return b if both a and b are truthy;

!!(a && b)

will return true if both a and b are truthy.

孤独岁月 2024-11-24 08:01:21

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

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

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

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

!运算符返回一个布尔值

!"a" == false

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

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

myVar = undefined
!!myVar == false

ETC。

The && operator returns either false or the last value in the expression:

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

The || operator returns the first value that evaluates to true

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

The ! operator returns a boolean

!"a" == false

So if you want to convert a variable to a boolean you can use !!

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

myVar = undefined
!!myVar == false

etc.

儭儭莪哋寶赑 2024-11-24 08:01:21

只不过是两个而已!操作员彼此相邻。但是双重否定是没有意义的,除非你使用 !!就像一个转换为布尔类型的运算符。

它将把任何东西转换为真或假......

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...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文