我正在查看其他人编写的一些代码,我注意到这个奇怪的javascript语法..基本上,它看起来像这样:
// This is understandable (but I dont know if it have relevance)
var re = new RegExp("^" + someVar + "_", "i");
// !!~ ??? What is this black magic?
if (!!~varA.search(re)) { ... }
这是难以谷歌的事情之一..任何可以解释这个问题的Javascript gurues?
答案 0 :(得分:11)
这样的一元运算符只需要从右到左解释。 ~
是按位“not”运算符,!
是布尔反转。因此,那三个:
false
或true
) ~
这里是最棘手的。当它找不到任何东西时,“搜索”例程(我推测)返回-1
。 ~
运算符将-1
变为0
,因此~
允许用户将“搜索”返回值解释为true
(非零)找到目标,如果没有,则false
(零)。
!
的后续应用 - 两次 - 强制结果为真正的布尔值。它已应用两次,以便保持true
/ false
感。 edit 请注意,在此特定代码中,强制转换为boolean并不是必需的。只有if
运算符的结果,~
语句的正常语义才能正常工作。
答案 1 :(得分:4)
基本上,.search
返回找到结果的位置,如果不匹配则返回-1
。 普通人们会写:
if( varA.search(re) > -1)
但我个人只是使用:
if( varA.match(re))
答案 2 :(得分:0)
以外行人的话来说
~
正在做 - (N + 1) 和
!!
第一次爆炸从数字转换为布尔值,第二次撤消逻辑而不是第一次爆炸所执行的逻辑。
看看这个网站。
它有一些解释