解释繁琐的条件表达式
Interpret a cumbersome conditional expression
昨晚我正在寻找一个 AngularJS 片段来管理垂直选项卡菜单,我发现了这个表达式:
if(+!!variableName)
doSomething();
对不起,我不明白这是什么意思+!!variableName
如何解析此条件表达式?
这句话没有什么麻烦。它只是两个运算符的组合 - 逻辑不!
和一元加+
。
评估步骤:
-
!!
:逻辑非运算符。将变量转换为布尔值。看看是什么!!(不是不是)JavaScript 中的运算符? -
+
: 一元加。按数字投射。参见javascript:变量前的加号符号
简而言之,如果变量为真,结果将是1
的,如果变量是假的,则结果0
。
另请注意,这里不需要一元加运算符,因为布尔值本身在if()
中就足够了。
上述语句可以安全地更改为
if(!!variableName) // Note `+` is removed.
doSomething();
这将被评估为:
说variableName
持有"test"
-
!variableName
=>false
-
!false
=>true
-
+true
=>1
这就是计算该表达式的方式。
!
是逻辑 not 运算符,用于否定值。
+
是普通的算术运算符(又名 Tushar 提到的一元加号),但如果你让它前面有任何变量,那么它将尝试将该变量转换为数字。如果它未能做到这一点,它将计算表达式以NaN
这
基本上是一种说法,如果数字如果不是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();
相关文章:
- Jslint 错误:需要条件表达式,而是看到分配
- 不使用关系运算符的JavaScript条件表达式
- Angular.js模板中的条件表达式
- 布尔代数 - 使用 AND/OR 导出条件表达式是棘手的部分
- 优化 if 语句中的条件表达式
- 解释繁琐的条件表达式
- 有没有办法生成一个可以通过 if 直接执行的条件表达式
- 条件表达式的评估
- 是否有针对需要条件表达式的赋值的在线 javascript 测试
- birt 报告 JavaScript 条件表达式
- 如果条件表达式,如何确定输入字段类型“submit”的当前 ID 以在 PHP 中使用
- 复杂的javascript条件表达式
- 为什么这个条件表达式需要括号
- 取决于下拉选择的多个条件表达式
- JSHint -期望一个条件表达式,却看到了一个赋值
- 条件表达式中的视频源
- 受括号影响的JavaScript中的条件表达式
- 在for循环中是否可能有第三个条件表达式?
- Javascript:在通常是条件表达式的地方使用赋值语句
- ngClass AND条件表达式