Javascript-奇怪的if语法
我正在浏览其他人编写的一些代码,我注意到这个奇怪的javascript if语法。。基本上,它看起来是这样的:Javascript-奇怪的if语法,javascript,Javascript,我正在浏览其他人编写的一些代码,我注意到这个奇怪的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)) { ... } 这是谷歌很难做到的事情
// 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专家都可以解释这一点吗?像这样的一元运算符只需要从右到左进行解释
~
是按位“not”运算符,代码>是布尔值的倒数。因此,这三个:
- 将返回值转换为整数
- 反转整数的位
- 检查数字的“真实性”(零或非零,
false
或true
)
- 反转布尔值
- 再倒过来
~
这里是最棘手的。“搜索”例程(我猜想)在没有找到任何东西时返回-1
。~
操作符将-1
转换为0
,因此~
允许用户在找到目标时将“搜索”返回值解释为true
(非零),如果未找到目标则将其解释为false
(零)
的后续应用代码>-两次-强制结果为真布尔值。它被应用两次,以便保持true
/false
的感觉。请注意,在这个特定代码中,强制转换为布尔值是完全不必要的;if
语句的正常语义仅适用于~
运算符的结果。基本上,.search
返回查找结果的位置,或者如果不匹配,返回-1
。正常人只会写:
if( varA.search(re) > -1)
但就我个人而言,我只会使用:
if( varA.match(re))
通俗地说
~
正在进行-(N+1)
及
第一次爆炸将数字转换为布尔值,第二次爆炸撤消第一次爆炸执行的逻辑not
请查看此网站。
它有一些解释
的可能副本的可能副本,并检查其内容。。。这是一种毫无意义的语法,在键入时可以保存0个字符,并降低可读性<代码>varA.search(re)>-1
是“兄弟”吗?我不相信这是其他双感叹号问题的重复<代码>~
与大不相同代码>。我承认,~代码>对我来说是新的。这是一个神秘的问题,我认为它有理由提出自己的问题。我总是喜欢一种更具表现力的方法:if(varA.search(re)>=0)
。您的第二个示例将为-1
返回true
,给出一个falsepositive@Bojangles当前位置我一定错过了什么。我不认为这里有机会出现假阳性。请注意,第二个示例使用.match
而不是.search
。如果varA.search()
返回-1
,则If()
将满足,但未找到匹配项,因此为falsepositive@Bojangles正如赵所说,第二个例子使用的是匹配,而不是搜索。废话,这很尴尬。。。对不起:(
作为参考,!!
在这里是完全不必要的。只有在以后存储结果并希望确保它是布尔值时,您才需要它。如果要在if
中立即使用,它就太过分了。@cHao是的,在本例中它没有必要。@cHao事实上,您可以进一步说~
是overkill,因为您可以只添加+1
,所以“不匹配”返回值为falsy,“第一个位置的匹配”变为truthy。@Kolink:可以。但是,同样,“~x”。length
:)但是我从来没有为任何合法的目的使用过~
,我相信大多数其他程序员也不会使用它。好吧,如果你选择极简主义,但如果你鼓励可读性…呵呵。
!!