What does the '!!!' syntax mean in javascript?
我刚刚在一个WindowsStore应用程序示例中遇到以下代码行。
1
| if (that.assets[asset].object === null || !!!that.assets[asset].object.canPlayType) { |
它使用三重感叹号语法。我做了一些测试(我很肯定我遗漏了一些东西),结果在单个!中总是一样的。我认为它与===和!==有些相似。
有人能解释一下!!!语法的含义吗?
I assumed it was somewhat equivalent to === and !==...
不,只有三个"不"运算符,一个"不"运算符。
它与!(!(!(x)))相同,总是等同于单个!x。
这根本没有用。!!是将任何变量转换为其布尔表示的一种有点神秘的方法,但!!!只是愚蠢的。您可以将任意数量的!链接在一起,但它对任何东西都没有用处。
- 我不敢相信只是…用3写会有什么用!而不仅仅是1?
- @索斯库特:没用。什么都没有-d
- 如我所说,没有用。除了混淆之外,不能有任何有效的用法。它总是等价于单个!。程序员很傻。
- 这相当于编码员的"更多的牛铃!"
- "任意数……"只有奇数,作为偶数将颠倒含义。(所以)!!!!与之相反!!!!——哇!!!!!)
- @容格不,不仅是奇数;正如我所说,你可以把任意数连在一起,它对任何事物都没有用处。唯一有用的数字是!和!!,我在回答中提到了这两个数字。
- @美加:我的意思是,不管你是从一个单一的!还是双!!开始,这个(无用的)扩展名是!!,重复的,恶心的,所以总数是奇数或偶数。
- 呃,不,他们可能在布尔转换中尝试使用反向。!!!无论X的数据类型是什么,X都会将X转换为布尔值。如果x不为空,则为真。所以!!!!X基本上是相反的!!
- @杰伊,这正是我在回答中所说的。!!!x是!!x的否定,但它是无用的,因为它相当于!x。没有理由用!!!x代替!x。
- 你说得对。node.js刚刚在0.11中修复了assert.js。github.com/joyent/node/commit/…
!真-假
!!
!!!!真-假
这完美地回答了您的问题https://stackoverflow.com/a/264037/1561922
!!!!X可能正在反转布尔转换!X:
1 2 3
| var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true |
"任何非空字符串的值都将为true"
所以!!!"false"; // == false。
这个问题不是笑话。node.js(5天前下载)在assert.js中使用它,例如:
1 2 3 4
| function ok(value, message) {
if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok; |
编辑:我认为他们这样做是出于代码可读性的原因,出于习惯,因为!值已经足够。
编辑:节点更改了它。我不知道为什么我5天前下载的node.js版本仍然存在!!!!值而不是!GitHub中的值。
编辑:乔纳森解释了原因。nodejs.org的稳定版本v0.10.xx还有!!!!值,不稳定版本v0.11.xx具有!价值修正。
- 这个问题是七个月前问(答)的。你的答案显然没有给表格带来多少东西,除了提到像这样的代码以前在节点中,但现在没有了。这可以通过一个注释来实现,可能包含一个指向你问题的链接。发布这样的答案一次是可以理解的,多次发布就会危险地接近滥用范围。请花些时间阅读帮助中心,以后请不要发布这些答案。谢谢您。
- @fr&233;d&233;richamidi它仍然用于从nodejs.org下载的当前版本(v0.10.xx)。它仅在v0.11.xx及以后版本中实施,该版本仅可通过其他渠道获得。
- @您显然没有阅读链接。尤其是最后一个。这就是为什么。这是乔纳森·洛诺夫斯基的评论。请花不切实际的时间阅读和理解手头上的所有东西,然后再评论。谢谢您。
- 你可能错过了我的观点。我已经读过这些链接,尽管它们可能对您感兴趣,但它们与这个问题并不真正相关(这里的提问者不关心节点,只询问关于!!!构造)。你也在另一个问题下发布了完全相同的迟交答案,这是一个问题。