2015-01-15 86 views
3

通常情況下,我只需把它放在if聲明如下比較布爾值:在Javascript中比較一個值的最佳做法是什麼?

var foo = 'Foo data'; 
if (foo) { 
    // Do somethings 
} 

最近,我剛剛看到一些人轉換的變量比較之前布爾:

if (!!foo) { 
    // Do somethings 
} 

是在性能或優勢方面有什麼不同?哪一個更可取?

+1

您是如何需要它的?[請檢查此] (http://stackoverflow.com/questions/784929/what-is-the-not-not-operator-in-javascript).. –

+2

[This blog post](http://james.padolsey.com/javascript/) truthy-falsey /)似乎相關且有幫助。 – Sukima

回答

7

有比較沒有功能上的差異,如在此小提琴http://jsfiddle.net/aeujgovd/1

if(foo){} 
if(!!foo){} 

使用的唯一理由!例如,如果您的API需要一個適當的布爾值而不是像0或1這樣的標誌,則強制布爾值爲真/假值。

var myObj = {flag: 0}; 
function submitObj(myObj){ 
    myObj.flag = !!myObj.flag; 
    // ... Ajax submit 
} 
0

如果您可以避免轉換...它在性能方面總是更好。 如果你想要實現的是檢查foo是否爲空,我會選擇第一個選項。

4

ECMAScript Language Specification的12.5節:

12.5 if聲明

...

生產IfStatement:if (Expression)聲明如下評價:

  1. exprRef成爲評估Expressi的結果上。
  2. 如果ToBoolean(GetValue(exprRef))false,則返回(normal, empty, empty)
  3. 返回評估語句的結果。

從這一點我們可以看出,ToBoolean()是在表達所傳遞的使用,無論它已經是一個布爾值,或沒有。

正因爲如此,我會說,這是非常不可能的if (foo)會造成比if (!!foo)更多的性能損失,並在你的JavaScript文件造成兩個!字符兩個額外的字節數可能會超過任何的不管怎樣,在if聲明中將該值轉換爲布爾值可以獲得額外的獎勵。

相關問題