当前位置:首页 > JavaScript

js实现typeof

2026-01-31 20:23:34JavaScript

typeof 运算符的基本用法

在 JavaScript 中,typeof 是一个一元运算符,用于返回一个表示操作数类型的字符串。以下是基本语法和常见类型的返回值:

typeof operand

常见返回值:

  • "number":数值类型(包括 NaN)。
  • "string":字符串类型。
  • "boolean":布尔类型。
  • "undefined":未定义的变量或值。
  • "object":对象或 null(历史遗留问题)。
  • "function":函数类型。
  • "symbol":Symbol 类型(ES6 新增)。

实现自定义 typeof 函数

由于原生 typeofnull 和数组的检测不够精确,可以通过以下方式实现更精确的类型检测:

function customTypeof(value) {
  if (value === null) {
    return "null";
  }
  const baseType = typeof value;
  if (baseType !== "object") {
    return baseType;
  }
  const objectType = Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
  return objectType;
}

处理特殊情况的示例

针对 null、数组和内置对象的检测:

console.log(customTypeof(null)); // "null"
console.log(customTypeof([])); // "array"
console.log(customTypeof(new Date())); // "date"
console.log(customTypeof(/regex/)); // "regexp"

使用 Object.prototype.toString 的底层原理

Object.prototype.toString 方法会返回 [object Type] 格式的字符串,其中 Type 是对象的内部类型:

js实现typeof

Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"

注意事项

  • 原生 typeof 对函数返回 "function",但函数本质是可调用的对象。
  • 使用 instanceof 可以检测对象的构造函数链。
  • 现代 JavaScript 可以使用 Symbol.toStringTag 自定义对象的类型标签。

标签: jstypeof
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…