昨晚我正在寻找一个AngularJS代码片段来管理垂直标签菜单,我找到了这个表达式:
if(+!!variableName)
doSomething();
抱歉,我无法理解它是什么意思+!!variableName
我该如何解决这个条件表达式?
答案 0 :(得分:2)
该声明中没有繁琐的。它只是两个运算符的组合 - 逻辑不!
和一元加+
。
评估步骤:
!!
:Logical Not operator。将变量强制转换为布尔值。请参阅What is the !! (not not) operator in JavaScript? +
:Unary plus。转为数字。请参阅javascript: plus symbol before variable 简而言之,如果变量为truthy,则结果为1
;如果为falsy,则结果为0
。
另请注意,此处不需要一元加运算符,因为if()
中布尔本身就足够了。
上述声明可以安全地更改为
if(!!variableName) // Note `+` is removed.
doSomething();
答案 1 :(得分:2)
这将被评估为,
说variableName
持有"test"
!variableName
=> false
!false
=> true
+true
=> 1
这是表达式的评估方式。
!
是一个逻辑非运算符,用于否定值。
+
是正常的算术运算符(如提及tushar所提及的unary plus),但是如果你在任何变量之前使用它,那么它将尝试将该变量转换为数字。如果它没有这样做,它会将表达式评估为NaN
答案 2 :(得分:1)
这基本上是一种说法,如果数字不是null
或undefined
if(+!!variableName)
doSomething();
如果variableName
为0
,空(""
),null
或undefined
,则会转换为false
或{ {1}}。
例如,如果
true
现在,这将转换为var variableName = null;
- > (+!!null)
- > (+!true)
- > (+false)
同样,如果
false
这将转换为var variableName = "anything";
- > (+!!"anything")
- > (+!false)
- > (+true)
true
对结果没有影响,因此可以安全地删除。
实际上,整个条件表达式可以替换为
+