2016-03-07 118 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