当前位置:首页 > JavaScript

js typeof实现

2026-03-14 19:56:13JavaScript

typeof 的实现原理

JavaScript 中的 typeof 操作符用于检测变量的数据类型。其底层实现与 JavaScript 引擎的内部类型标签机制相关。具体原理如下:

  • 在 JavaScript 引擎(如 V8)中,每个值都有一个隐藏的类型标签(通常是一个 1-3 位的二进制值)
  • typeof 通过读取这个标签来判断类型
  • 对于对象类型(包括 null),标签为 0,而 typeof null 返回 "object" 是一个历史遗留的 bug

常见返回值

typeof 可能返回以下字符串:

typeof 42              // "number"
typeof "hello"         // "string"
typeof true            // "boolean"
typeof undefined       // "undefined"
typeof null            // "object" (历史遗留问题)
typeof {}              // "object"
typeof []              // "object"
typeof function() {}   // "function"
typeof Symbol()        // "symbol"
typeof 123n            // "bigint"

手动实现 typeof

可以通过 Object.prototype.toString 实现更精确的类型判断:

js typeof实现

function typeOf(value) {
  return Object.prototype.toString.call(value).slice(8, -1).toLowerCase()
}

typeOf(null)      // "null"
typeOf([])        // "array"
typeOf({})        // "object"
typeOf(new Date)  // "date"

注意事项

  • typeof 对未声明的变量返回 "undefined" 而不会报错
  • 函数虽然是对象,但 typeof 会特殊返回 "function"
  • 数组和普通对象都会返回 "object",需要额外方法区分
  • 在 ES6 中新增了对 SymbolBigInt 类型的支持

标签: jstypeof
分享给朋友:

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…