解释繁琐的条件表达式

Interpret a cumbersome conditional expression

本文关键字:条件 表达式 解释      更新时间:2023-09-26

昨晚我正在寻找一个 AngularJS 片段来管理垂直选项卡菜单,我发现了这个表达式:

if(+!!variableName)
  doSomething();

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

这句话没有什么麻烦。它只是两个运算符的组合 - 逻辑不!和一元加+

评估步骤:

  1. !!:逻辑非运算符。将变量转换为布尔值。看看是什么!!(不是不是)JavaScript 中的运算符?
  2. + : 一元加。按数字投射。参见javascript:变量前的加号符号

简而言之,如果变量为真,结果将是1的,如果变量是假的,则结果0

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

上述语句可以安全地更改为

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

这将被评估为:

variableName持有"test"

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

这就是计算该表达式的方式。

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

+是普通的算术运算符(又名 Tushar 提到的一元加号),但如果你让它前面有任何变量,那么它将尝试将该变量转换为数字。如果它未能做到这一点,它将计算表达式以NaN

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

if(+!!variableName)
  doSomething();

如果variableName0、空("")、nullundefined,它将转换为falsetrue

例如,如果

var variableName = null;

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

同样,如果

var variableName = "anything";

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

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

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

if(variableName)
  doSomething();