根據ECMAScript規範,the unary logical NOT operator(!
)和the Boolean()
function都使用the internal function ToBoolean()
,並且NOT運算符還會執行一些檢查以反轉結果。那麼爲什麼雙重邏輯非運算much faster比運行Boolean()
函數?爲什麼Boolean()在Javascript中很慢?
我用下面這段代碼來測試這是更快:
function logicalNotOperator() {
var start = performance.now();
for (var i = 0; i < 9999999; i++) !!Math.random();
return 0.001 * (performance.now() - start);
}
function booleanFunc() {
var start = performance.now();
for (var i = 0; i < 9999999; i++) Boolean(Math.random());
return 0.001 * (performance.now() - start);
}
注:我不是指new Boolean()
構造,但Boolean()
功能,它可以強制它給一個布爾參數。
*「更快」* - 一些證據? – dfsq 2013-03-11 09:51:37
布爾()或新的布爾()? – StarPinkER 2013-03-11 09:52:19
'Boolean()'必須經歷爲每個調用創建一個新的執行上下文的花裏胡哨,其中'!! true'不會;我會*猜測*這是花費了很多時間的地方。 – Matt 2013-03-11 09:54:27