2016-03-07 34 views
0

昨晚我一直在寻找一个AngularJS片断来管理垂直选项卡菜单中,我发现这个表达式:解释繁琐的条件表达式

if(+!!variableName) 
    doSomething(); 

对不起,我不明白是什么意思+!!variableName 如何我解决这个条件表达式?

回答

1

这基本上是说,如果号码,如果不nullundefined

if(+!!variableName) 
    doSomething(); 

如果variableName0,空的一种方式("") ,nullundefined,它将转换为falsetrue

例如,如果

var variableName = null; 

现在,这将转化为(+!!null) - >(+!true) - >(+false) - >false

同样,如果

var variableName = "anything"; 

这将转化为(+!!"anything") - >(+!false) - >(+true) - >true

+在这种情况下对结果没有影响,所以可以安全地删除。

事实上,整个条件表达式可以通过

if(variableName) 
    doSomething(); 
被替换
2

在该声明中没有任何繁琐。它只是两个运算符的组合 - 逻辑不是!和Unary加+

评估步骤:

  1. !!Logical Not operator。将该变量转换为布尔值。参见What is the !! (not not) operator in JavaScript?
  2. +Unary plus。强制转换为数字。见javascript: plus symbol before variable

总之,结果将是1如果变量是truthy0如果falsy

另请注意,此处不需要单数加号运算符,因为布尔本身在if()中已足够。

上面的语句可以被安全地变更为

if(!!variableName) // Note `+` is removed. 
    doSomething(); 
2

这将像进行评价,

variableName被保持"test"

  1. !variableName =>false
  2. !false =>true
  3. +true =>1

这是如何的表达进行评价。

!是逻辑非运算符,用于否定值。

+是正常的算术运算符(又名unary plus as tushar提到过),但是如果你在它前面加上任何变量,那么它会尝试将该变量转换为数字。如果不能做到这一点,将评估表达NaN