利用toString标签判断特殊内置对象(Map, Set, Date)

云丽小哥_1799

云丽小哥_1799

2026-06-19

817人浏览

原创

object.prototype.tostring 是判断内置对象类型最可靠的方法,因其通过读取 [[class]] 或 symbol.tostringtag 返回标准字符串标识,能准确区分 map、set、date 等 typeof 返回 "object" 且 instanceof 跨 iframe 失效的类型。

利用tostring标签判断特殊内置对象(map, set, date)

JavaScript 中,Object.prototype.toString 是判断内置对象类型最可靠的方法之一,尤其对 Map、Set、Date 等特殊内置对象,比 typeof 或 instanceof 更准确、更安全。

为什么 toString 比 typeof 更适合判断 Map/Set/Date

typeof 对多数内置对象都返回 "object"(包括 Map、Set、Date、Array、null),无法区分;而 instanceof 在跨 iframe 或不同执行上下文时可能失效。而 Object.prototype.toString.call() 会读取对象内部的 [[Class]](ES5)或 Symbol.toStringTag(ES6+)属性,返回标准字符串标识,稳定且规范。

标准用法:统一调用 Object.prototype.toString

推荐始终使用以下模式,避免直接调用对象自身的 toString(可能被重写):

  • Object.prototype.toString.call(new Map()) → "[object Map]"
  • Object.prototype.toString.call(new Set()) → "[object Set]"
  • Object.prototype.toString.call(new Date()) → "[object Date]"
  • Object.prototype.toString.call([]) → "[object Array]"
  • Object.prototype.toString.call(null) → "[object Null]"
  • Object.prototype.toString.call(undefined) → "[object Undefined]"

封装一个可靠的类型检测函数

可提取公共逻辑,便于复用:

Javascript Sdk
Javascript Sdk

用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。

下载
function getType(obj) {
  return Object.prototype.toString.call(obj).slice(8, -1);
}
// 使用示例:
getType(new Map());    // "Map"
getType(new Set());    // "Set"
getType(new Date());   // "Date"
getType({});           // "Object"
getType(/abc/);       // "RegExp"

注意:slice(8, -1) 去掉 "[object " 和 "]",只保留核心类型名。该方式兼容所有主流环境,包括旧版 IE(IE9+ 完全支持)。

补充说明:Symbol.toStringTag 的影响

ES6 允许自定义对象的 toString 输出,通过设置 Symbol.toStringTag 属性:

const myObj = { [Symbol.toStringTag]: 'MyCustom' };
Object.prototype.toString.call(myObj); // "[object MyCustom]"

但 Map、Set、Date 等原生构造器已内置对应标签,无需手动设置,直接调用即可准确识别。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

javascript

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.31

2471

5

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.31

514

9

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2026.02.12

422

19

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

450

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

323

7

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.17

493

20

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.27

263

6

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

180

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

80

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.6万人学习