使用函数或类型

Using a function or typeof

本文关键字:类型 函数      更新时间:2023-09-26

typeof 运算符比函数调用慢多少?还是可以忽略不计和微观优化?

if (isNumber(myVar)) {
}
if (typeof myVar === 'number') {
}

还是可以忽略不计和微观优化?

的,当且仅当您将有问题的代码确定为性能瓶颈时,这绝对是值得担心的事情,这实际上不太可能。这是微优化。函数调用非常非常快,即使它们没有被 JavaScript 引擎优化出来。我曾经担心Array#forEach第一次出现在现场时函数调用开销。即使在当时,这也不是问题,即使是在我能找到的最古老、最慢的 JavaScript 解释器上:IE6 中的那个。我的博客上的详细信息: foreach和运行时成本

是否需要更长的时间...一根绳子有多长?这完全取决于你正在使用的 JavaScript 引擎,以及有问题的代码是否被引擎识别为"热点"(假设它是像 V8 这样的引擎,分阶段工作并优化热点)。

如果现代引擎变得很重要,则可能会内联。这不是保证。

还是可以忽略不计和微观优化?

它可以忽略不计,并且是微优化的。


如果你想检查某物是否是一个数字,我建议使用isNaN检查,然后转换为一个数字。

if (!isNaN(myVar)) {
  myVar = +myVar;
}

这样,您实际上并不关心如何将值视为数字。

然后,使用该 API 的人可以选择传递一个可被视为数字的对象:

myVar = {
  valueOf: function () {
    return 5;
  }
};