解释一个繁琐的条件表达式

时间:2016-03-07 06:22:51

标签: javascript

昨晚我正在寻找一个AngularJS代码片段来管理垂直标签菜单,我找到了这个表达式:

if(+!!variableName)
  doSomething();

抱歉,我无法理解它是什么意思+!!variableName 我该如何解决这个条件表达式?

3 个答案:

答案 0 :(得分:2)

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

评估步骤:

  1. !!Logical Not operator。将变量强制转换为布尔值。请参阅What is the !! (not not) operator in JavaScript?
  2. +Unary plus。转为数字。请参阅javascript: plus symbol before variable
  3. 简而言之,如果变量为truthy,则结果为1;如果为falsy,则结果为0

    另请注意,此处不需要一元加运算符,因为if()中布尔本身就足够了。

    上述声明可以安全地更改为

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

答案 1 :(得分:2)

这将被评估为,

variableName持有"test"

  1. !variableName => false
  2. !false => true
  3. +true => 1
  4. 这是表达式的评估方式。

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

    +是正常的算术运算符(如提及tushar所提及的unary plus),但是如果你在任何变量之前使用它,那么它将尝试将该变量转换为数字。如果它没有这样做,它会将表达式评估为NaN

答案 2 :(得分:1)

这基本上是一种说法,如果数字不是nullundefined

if(+!!variableName)
  doSomething();

如果variableName0,空(""),nullundefined,则会转换为false或{ {1}}。

例如,如果

true

现在,这将转换为var variableName = null; - > (+!!null) - > (+!true) - > (+false)

同样,如果

false

这将转换为var variableName = "anything"; - > (+!!"anything") - > (+!false) - > (+true)

在这种情况下,

true对结果没有影响,因此可以安全地删除。

实际上,整个条件表达式可以替换为

+