typeof在处理ES6 Symbol类型时的表现

胖枫君_2224

胖枫君_2224

2026-06-18

948人浏览

原创

执行 typeof symbol() 返回字符串 "symbol",这是 javascript 对 es6 新增原始类型 symbol 的标准识别方式;symbol 是原始类型,不是对象,typeof 明确将其与 "object" 区分开,且对所有 symbol 值(无论有无描述、是否全局)均返回 "symbol"。

typeof在处理es6 symbol类型时的表现

执行 typeof Symbol() 返回字符串 "symbol",这是 JavaScript 对 ES6 新增原始类型 Symbol 的标准识别方式。

Symbol 是原始类型,不是对象

尽管 Symbol 值常用于对象属性键、具有类似对象的“不可变”和“唯一性”特征,但它本质上属于原始数据类型(primitive)。typeof 明确将其与 "object" 区分开——不会像 null 那样误判为对象。

  • typeof Symbol() → "symbol"
  • typeof Symbol("desc") → "symbol"
  • typeof Symbol.iterator → "symbol"

与其他类型的返回值保持一致

typeof 对所有原始类型都返回小写字符串标识,Symbol 也不例外。它和 number、string、boolean 等一样,是语言层面直接支持的类型检测结果。

javascript-pro
javascript-pro

专注现代 ECMAScript、异步编程、性能优化和全栈的 JavaScript 专家,适用于现代开发

下载
  • 不依赖构造函数或原型链,无需 instanceof
  • 即使传入描述字符串(如 Symbol("foo")),类型仍是 "symbol"
  • 全局 Symbol(如 Symbol.iterator)同样返回 "symbol"

常见误判点提醒

容易混淆的地方主要来自语义或使用场景,而非 typeof 本身的行为:

  • Symbol() 不是函数调用——Symbol 是工厂函数,但返回值是原始值,不是对象实例
  • 不能用 new Symbol() —— 会抛出 TypeError,因为它不是构造器
  • typeof null 返回 "object" 是历史遗留问题;而 typeof Symbol() 返回 "symbol" 是设计明确、无歧义的

实际判断建议

若需在代码中做类型分支,可直接用严格相等判断:

  • if (typeof x === "symbol") { /* 处理 Symbol */ }
  • 注意:不要用 instanceof Symbol,因为 Symbol 不是构造函数,且 Symbol 值不是对象
  • 也不推荐用 Object.prototype.toString.call(x) 来检测,既冗余又不必要

相关专题

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

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

2023.10.31

2931

5

php数据类型
php数据类型

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

2025.10.31

534

9

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

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

2026.02.12

502

19

JavaScript中的typeof用法
JavaScript中的typeof用法

在JavaScript中,typeof是一个用来确定给定变量的数据类型的操作符。可以用来确定一个变量是字符串、数字、布尔值、函数、对象或undefined的数据类型。更多关于typeof用法相关文章,详情请看本专题下面的文章,php中文网欢迎大家前来学习。

2023.11.23

8087

13

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

20

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

0

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

0

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

0

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

0

15

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ECMAScript6 / ES6---十天技能课堂
ECMAScript6 / ES6---十天技能课堂

共25课时 | 2.7万人学习

HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 10.9万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 19.1万人学习