昨晚我一直在尋找一個AngularJS片斷來管理垂直選項卡菜單中,我發現這個表達式:解釋繁瑣的條件表達式
if(+!!variableName)
doSomething();
對不起,我不明白是什麼意思+!!variableName
如何我解決這個條件表達式?
昨晚我一直在尋找一個AngularJS片斷來管理垂直選項卡菜單中,我發現這個表達式:解釋繁瑣的條件表達式
if(+!!variableName)
doSomething();
對不起,我不明白是什麼意思+!!variableName
如何我解決這個條件表達式?
這基本上是說,如果號碼,如果不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();
被替換
在該聲明中沒有任何繁瑣。它只是兩個運算符的組合 - 邏輯不是!
和Unary加+
。
評估步驟:
!!
:Logical Not operator。將該變量轉換爲布爾值。參見What is the !! (not not) operator in JavaScript?+
:Unary plus。強制轉換爲數字。見javascript: plus symbol before variable另請注意,此處不需要單數加號運算符,因爲布爾本身在if()
中已足夠。
上面的語句可以被安全地變更爲
if(!!variableName) // Note `+` is removed.
doSomething();
這將像進行評價,
說variableName
被保持"test"
!variableName
=>false
!false
=>true
+true
=>1
這是如何的表達進行評價。
!
是邏輯非運算符,用於否定值。
+
是正常的算術運算符(又名unary plus as tushar提到過),但是如果你在它前面加上任何變量,那麼它會嘗試將該變量轉換爲數字。如果不能做到這一點,將評估表達NaN