typeof与instanceof性能对比探究:哪个执行效率更高?
typeof vs instanceof: 性能对比测试
我最近也好奇typeof和instanceof到底哪个性能更优,于是写了一套测试代码来验证,同时也扩展测试了普通箭头函数和异步箭头函数的情况,分享给大家:
let TIMES = 1000 * 1000 * 100; // 1亿次循环,放大性能差异 // 测试普通箭头函数 instanceof Function console.time("(() => { }) instanceof Function"); for (let i = 0; i < TIMES; i++) { (() => { }) instanceof Function; } console.timeEnd("(() => { }) instanceof Function"); // 测试异步箭头函数 instanceof Function console.time("(async () => { }) instanceof Function"); for (let i = 0; i < TIMES; i++) { (async () => { }) instanceof Function; } console.timeEnd("(async () => { }) instanceof Function"); // 补充 typeof 对比测试 console.time("typeof (() => { }) === 'function'"); for (let i = 0; i < TIMES; i++) { typeof (() => { }) === 'function'; } console.timeEnd("typeof (() => { }) === 'function'"); console.time("typeof (async () => { }) === 'function'"); for (let i = 0; i < TIMES; i++) { typeof (async () => { }) === 'function'; } console.timeEnd("typeof (async () => { }) === 'function'");
测试结果与核心分析
typeof性能碾压instanceof:这是因为typeof是直接读取JS引擎内部的类型标记,属于极低开销的底层操作;而instanceof需要沿着原型链逐层查找(比如判断函数时要查Function.prototype是否在目标对象的原型链上),链式查找的逻辑天然带来更高的性能开销。- 异步函数的额外开销:不管用哪种判断方式,异步箭头函数的测试耗时都会比普通箭头函数稍高——这是因为异步函数的创建成本本身就比普通函数大一点,但两者的性能差距比例和普通函数场景完全一致。
- 日常开发的实际影响:如果只是单次调用,两者的性能差异几乎感知不到;但在高频调用场景(比如大型循环、框架核心逻辑),
typeof的优势会被放大,能带来更明显的性能提升。
实用建议
- 如果你只是判断基础类型(比如是否为函数、字符串、数字),优先用
typeof,既快又简洁; instanceof更适合自定义类的实例判断,或者需要基于原型链的复杂类型校验场景——毕竟它的核心能力不是简单的类型判断,而是原型关系验证。
内容的提问来源于stack exchange,提问作者Valentine Stone
相关产品推荐
相关产品推荐

