通常情況下,我只需把它放在if
聲明如下比較布爾值:在Javascript中比較一個值的最佳做法是什麼?
var foo = 'Foo data';
if (foo) {
// Do somethings
}
最近,我剛剛看到一些人轉換的變量比較之前布爾:
if (!!foo) {
// Do somethings
}
是在性能或優勢方面有什麼不同?哪一個更可取?
通常情況下,我只需把它放在if
聲明如下比較布爾值:在Javascript中比較一個值的最佳做法是什麼?
var foo = 'Foo data';
if (foo) {
// Do somethings
}
最近,我剛剛看到一些人轉換的變量比較之前布爾:
if (!!foo) {
// Do somethings
}
是在性能或優勢方面有什麼不同?哪一個更可取?
有比較沒有功能上的差異,如在此小提琴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
}
如果您可以避免轉換...它在性能方面總是更好。 如果你想要實現的是檢查foo是否爲空,我會選擇第一個選項。
從ECMAScript Language Specification的12.5節:
12.5
if
聲明...
生產IfStatement:
if (Expression)
聲明如下評價:
- 讓
exprRef
成爲評估Expressi的結果上。- 如果
ToBoolean(GetValue(exprRef))
是false
,則返回(normal, empty, empty)
。- 返回評估語句的結果。
從這一點我們可以看出,ToBoolean()
是在表達所傳遞的使用,無論它已經是一個布爾值,或沒有。
正因爲如此,我會說,這是非常不可能的if (foo)
會造成比if (!!foo)
更多的性能損失,並在你的JavaScript文件造成兩個!
字符兩個額外的字節數可能會超過任何的不管怎樣,在if
聲明中將該值轉換爲布爾值可以獲得額外的獎勵。
您是如何需要它的?[請檢查此] (http://stackoverflow.com/questions/784929/what-is-the-not-not-operator-in-javascript).. –
[This blog post](http://james.padolsey.com/javascript/) truthy-falsey /)似乎相關且有幫助。 – Sukima