[英]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.