2015-02-12 101 views
0

對於我的新JavaScript庫,我有一個功能isBinary,如果傳遞值爲10,truefalse,則返回true。爲了便於編寫,我使用了以下代碼,但是我想知道是否會減慢處理速度,並且毫秒很重要,因爲在某些地方該函數最多可解析一萬次。代碼:'邪惡'平等減慢代碼嗎?

isBinary = function(ins) { 
    return ins == 0 || ins == 1; //returns true if ins is true, false, 0, or 1  
}; 

但我不完全相信,如果操作者等於或==會更快或比嚴格相等慢,更||的。
最大淨度問題:
使用ins === 1 || ins === 0 || ins === true || ins === falseins == 1 || ins == 0會更快嗎?

回答

2

嚴格平等===會更快。如果您使用==,則JavaScript解釋器必須嘗試將該類型強制轉換爲有意義的內容。

我要指出,雖然,你的功能是不是真正的檢查,如果傳入的值是01false,或true

例如:

function isBinary(ins) { 
    return ins == 0 || ins ==1; 
} 

var arrayOne = [1]; 
var arrayOneString = ['1']; 

console.log(isBinary(arrayOne)); //returns true 
console.log(isBinary(arrayOneString)); //returns true 
console.log(isBinary("1")); //returns true 

我只是證明你的代碼沒有做什麼,你覺得它在做什麼。 JavaScript中的類型安全是困難的,並且不是「嚴格相等」的操作符不能被指向測試類型。

+0

因此無論哪種方式,'==='或運營商會更好地爲此? – Travis 2015-02-12 02:22:57

+0

是的,嚴格的平等是將要走的路。由於解釋類型 - 強制,它會更快並且不會給你帶來其他類型的誤報。 – Eclecticist 2015-02-12 02:24:17

1

基於jsPerf我問了這個之後不久進行的,寫的版本越長似乎越快。預備代碼爲:

<script> 
function isBinaryShort(ins) { 
    return ins == 1 || ins == 0; 
} 

function isBinaryLong(ins) { 
    return ins === 1 || ins === 0 || ins === true || ins === false; 
} 
</script> 

然後對我使用這兩種測試:

isBinaryLong(1) 
isBinaryLong(false) 
isBinaryLong("tree") 

但當然,簡稱短寫的版本。
這些截圖爲我講話。 enter image description here
Link如果你想測試自己。