前端/移动开发面试题更新 2026-08-05

请比较 JavaScript 中 typeof 运算符与 instanceof 运算符的用途与行为差异。

前端/移动开发技术原理JavaScript

考察说明

考查对 JavaScript 类型检测机制的掌握程度,以及区分原始类型与引用类型检测的能力。

回答思路

  1. 【回答框架 1】typeof 用于检测变量的数据类型,返回一个表示类型的字符串,如 'string'、'number'、'boolean'、'undefined'、'function'、'object' 等。它对原始类型(除 null 外)检测准确,但对 null 会返回 'object',这是一个历史遗留 bug。
  2. 【回答框架 2】instanceof 用于检测对象是否属于某个构造函数的实例,它检查对象的原型链上是否存在该构造函数的 prototype 对象。例如,[] instanceof Array 返回 true。它主要用于引用类型(对象、数组、函数等)的检测,但无法用于原始类型。
  3. 【回答框架 3】二者适用的场景不同:typeof 适合检测原始类型和函数,instanceof 适合检测自定义对象类型及其继承关系。在检测数组时,typeof 会返回 'object',因此需要借助 Array.isArray() 或 instanceof Array 来准确判断。
  4. 【回答框架 4】在使用 instanceof 时,需要注意跨窗口或跨 iframe 的问题,因为全局对象可能不同,导致 instanceof 结果不准确。此外,原始类型(如数字、字符串)不能直接使用 instanceof,需要通过包装对象或使用 Object.prototype.toString 等方法。
  5. 【关键点 1】typeof 返回类型字符串,对原始类型有效,但 null 返回 'object'。
  6. 【关键点 2】instanceof 检查原型链,适用于引用类型,不能用于原始类型。
  7. 【关键点 3】typeof 适合检测函数和原始类型,instanceof 适合检测对象类型和继承关系。
  8. 【关键点 4】检测数组时,typeof 不够用,可使用 Array.isArray() 或 instanceof。
  9. 【关键点 5】跨窗口环境下 instanceof 可能失效。
  10. 【易错点 1】把 typeof null === 'object' 当作 null 的类型,需注意区分。
  11. 【易错点 2】对原始类型直接使用 instanceof,如 'str' instanceof String 会返回 false。
  12. 【易错点 3】跨 iframe 时,instanceof 可能因全局对象不同而误判。