typeof 无法准确判断 null、普通对象(object)和数组(array),它们都会返回 'object';同时,它也无法区分函数类型与普通的对象类型,因为函数会返回 'function'。要解决这些问题,需要结合 object.prototype.tostring.call() 或 instanceof 来进行更精确的类型检查。

为什么 typeof null 返回 object?
在 JavaScript 的早期版本中,null 被设计为一种特殊的对象引用,因此 typeof null 返回 'object'。这是一个历史遗留的 Bug,至今未被修复以保持向后兼容性。要准确判断 null,应使用严格相等运算符 === 进行直接比较。

const value = null; console.log(typeof value === 'object'); // true console.log(value === null); // true
如何区分 Array 和 Object?
由于 typeof [] 和 typeof {} 都返回 'object',开发者通常使用 Array.isArray() 来区分数组和普通对象。该方法专门用于检测值是否为数组实例,是处理此类问题的标准做法。
立即学习“Java免费学习笔记(深入)”;

const arr = [1, 2, 3];
const obj = { a: 1 };
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
基于 typeof 对函数返回值的判断问题
当输入为函数时,typeof 返回 'function',这与对象类型不同。但在某些情况下,开发者可能误以为所有非原始类型都是对象,从而忽略了对函数的特殊处理。通过代码可以验证,函数在 typeof 下具有独立的类型标识。


















