昨晚我一直在寻找一个AngularJS片断来管理垂直选项卡菜单中,我发现这个表达式:解释繁琐的条件表达式
if(+!!variableName)
doSomething();
对不起,我不明白是什么意思+!!variableName
如何我解决这个条件表达式?
昨晚我一直在寻找一个AngularJS片断来管理垂直选项卡菜单中,我发现这个表达式:解释繁琐的条件表达式
if(+!!variableName)
doSomething();
对不起,我不明白是什么意思+!!variableName
如何我解决这个条件表达式?
这基本上是说,如果号码,如果不null
或undefined
if(+!!variableName)
doSomething();
如果variableName
是0
,空的一种方式(""
) ,null
或undefined
,它将转换为false
或true
。
例如,如果
var variableName = null;
现在,这将转化为(+!!null)
- >(+!true)
- >(+false)
- >false
同样,如果
var variableName = "anything";
这将转化为(+!!"anything")
- >(+!false)
- >(+true)
- >true
+
在这种情况下对结果没有影响,所以可以安全地删除。
事实上,整个条件表达式可以通过
if(variableName)
doSomething();
被替换
在该声明中没有任何繁琐。它只是两个运算符的组合 - 逻辑不是!
和Unary加+
。
评估步骤:
!!
:Logical Not operator。将该变量转换为布尔值。参见What is the !! (not not) operator in JavaScript?+
:Unary plus。强制转换为数字。见javascript: plus symbol before variable另请注意,此处不需要单数加号运算符,因为布尔本身在if()
中已足够。
上面的语句可以被安全地变更为
if(!!variableName) // Note `+` is removed.
doSomething();
这将像进行评价,
说variableName
被保持"test"
!variableName
=>false
!false
=>true
+true
=>1
这是如何的表达进行评价。
!
是逻辑非运算符,用于否定值。
+
是正常的算术运算符(又名unary plus as tushar提到过),但是如果你在它前面加上任何变量,那么它会尝试将该变量转换为数字。如果不能做到这一点,将评估表达NaN