js typeof实现
typeof 操作符的基本用法
在 JavaScript 中,typeof 是一个一元操作符,用于返回一个字符串,表示未经计算的操作数的类型。其语法非常简单:
typeof operand
operand 可以是任意 JavaScript 表达式,包括变量、字面量或函数调用。typeof 操作符会返回以下字符串之一:
"undefined""boolean""number""string""bigint""symbol""function""object"
typeof 的返回值详解
对于不同的数据类型,typeof 返回的结果如下:
typeof undefined; // "undefined"
typeof true; // "boolean"
typeof 42; // "number"
typeof "hello"; // "string"
typeof 9007199254740991n; // "bigint"
typeof Symbol(); // "symbol"
typeof function() {}; // "function"
typeof {}; // "object"
typeof null; // "object" (历史遗留问题)
typeof 的特殊情况
typeof null 返回 "object" 是一个已知的 bug,但由于历史原因无法修复。这是因为在 JavaScript 的早期版本中,值以 32 位存储,最低 3 位用于表示类型标签。null 的二进制表示全为 0,导致 typeof 误判为对象。

typeof null === "object"; // true
实现自定义 typeof
如果需要更精确的类型判断,可以结合 Object.prototype.toString 实现:
function typeOf(value) {
return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}
typeOf(null); // "null"
typeOf([]); // "array"
typeOf(new Date); // "date"
typeof 与未声明变量
typeof 的一个安全特性是,即使变量未声明也不会抛出错误:

typeof undeclaredVar; // "undefined"
这使得 typeof 成为检查变量是否存在的安全方式。
typeof 的实际应用
typeof 常用于类型检查:
if (typeof variable === "undefined") {
// 变量未定义
}
if (typeof value === "string") {
// 处理字符串
}
if (typeof callback === "function") {
callback();
}
typeof 的局限性
typeof 无法区分数组和普通对象,都会返回 "object"。如果需要更精确的类型判断,应使用 Array.isArray() 或其他方法。
typeof []; // "object"
Array.isArray([]); // true






