Javascript - 如果语法很奇怪

时间:2013-09-02 13:06:54

标签: javascript

我正在查看其他人编写的一些代码,我注意到这个奇怪的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?

3 个答案:

答案 0 :(得分:11)

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

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

~这里是最棘手的。当它找不到任何东西时,“搜索”例程(我推测)返回-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) 和

!!

第一次爆炸从数字转换为布尔值,第二次撤消逻辑而不是第一次爆炸所执行的逻辑。

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

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