[英]Why is Boolean() so slow in Javascript?
根據 ECMAScript 規范,一元邏輯 NOT 運算符( !
) 和Boolean()
函數都使用內部函數ToBoolean()
,NOT 運算符也執行一些檢查以反轉結果。 那么為什么雙重邏輯 NOT 運算比運行Boolean()
函數快得多呢?
我使用以下代碼來測試哪個更快:
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); } var logicalNotOperatorResult = logicalNotOperator(); var booleanFuncResult = booleanFunc(); var diff = booleanFuncResult - logicalNotOperatorResult; console.log('logicalNotOperator:', logicalNotOperatorResult); console.log('booleanFunc:', booleanFuncResult); console.log('diff:', diff);
注意:我指的不是new Boolean()
構造函數,而是Boolean()
函數,它強制將其提供給布爾值的參數。
我不知道 Javascript JIT 編譯器是如何在內部執行的。 現在布爾函數在 2020 年在 Chrome 中運行得更快。但是如果有一些不同的瀏覽器,不同的版本或不同的 JS 引擎!!
操作員工作得更快我想我知道答案的原因。 當您調用一個函數時,內存中有額外的工作用於推送堆棧和彈出堆棧。 當您使用! (NOT operator)
! (NOT operator)
無需在內存中為推送/彈出堆棧創建額外的工作。 這就是 NOT 運算符工作得更快的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.