5

我正在查看其他人编写的一些代码,我注意到这个奇怪的 javascript if 语法。基本上,它看起来像这样:

// 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 专家可以解释这一点吗?

4

3 回答 3

11

像这样的一元运算符只需要从右到左解释。~是按位“非”运算符,!是布尔逆运算。因此,这三个:

  • 将返回值转换为整数
  • 反转整数的位
  • 检查“真实性”的数字(零或非零,falsetrue
  • 反转布尔值
  • 再次反转它

这里~是最棘手的。“搜索”例程(我猜)-1在找不到任何东西时返回。~运算符转向-1,因此如果找到目标0,则~允许将“搜索”返回值解释为(非零),如果没有,则解释为(零)。truefalse

随后应用!- 两次 - 强制结果为真正的布尔值。它应用了两次,以便保持true/false感觉。编辑请注意,在此特定代码中根本不需要强制转换为布尔值;该if语句的正常语义仅适用于~运算符的结果。

于 2013-09-02T13:09:28.937 回答
4

基本上,.search返回它找到结果的位置,或者-1如果它不匹配。普通人只会写:

if( varA.search(re) > -1)

但就我个人而言,我只是使用:

if( varA.match(re))
于 2013-09-02T13:09:49.147 回答
0

通俗地说

 ~ 

正在做 -(N+1) 并且

!!

第一个 bang 将数字转换为布尔值,第二个 bang 撤消第一个 bang 执行的逻辑 not。

看看这个网站。
它有一些解释

http://dreaminginjavascript.wordpress.com/2008/07/04/28/

于 2013-09-02T13:10:32.623 回答