es6之 Symbol 独一无二的值

1、介绍

ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型是:undefinednull、布尔值(Boolean)、字符串(String)、数值(Number)、大整数(BigInt)、对象(Object)。

Symbol 值通过Symbol()函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

javascript 复制代码
let name = Symbol();

typeof name
// "symbol"

变量name就是一个独一无二的值。typeof运算符的结果,表明变量name是 Symbol 数据类型,而不是字符串之类的其他类型。 所以不会出现重名的可能。

Symbol :它是一种类似于字符串的数据类型。

javascript 复制代码
let s1 = Symbol('foo');
let s2 = Symbol('bar');

s1 // Symbol(foo)
s2 // Symbol(bar)

s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"

s1s2是两个 Symbol 值。如果不加参数,它们在控制台的输出都是Symbol(),不利于区分。有了参数以后,就等于为它们加上了描述,输出的时候就能够分清,到底是哪一个值。

如果 Symbol 的参数是一个对象,就会调用该对象的toString()方法,将其转为字符串,然后才生成一个 Symbol 值。

相关推荐
M ? A几秒前
你的 Vue 3 响应式状态,VuReact 如何生成 React Hooks 依赖数组?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
codeejun2 分钟前
每日一Go-53、Go微服务--限流与降级
开发语言·微服务·golang
阿里嘎多学长4 分钟前
2026-04-17 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Wadli6 分钟前
集群C++聊天服务器
服务器·开发语言·c++
凭君语未可8 分钟前
为什么需要代理?从一个基础问题理解 JDK 静态代理
java·开发语言
luoqice10 分钟前
利用flv库读取flv文件时长c程序
c语言·开发语言
NotFound48612 分钟前
Go语言中的图形界面开发实战解析:从GUI到WebAssembly
开发语言·golang·wasm
competes14 分钟前
React.js JavaScript前端技术脚本运行框架。程序员进行研发组项目现场工作落地的一瞬之间适应性恒强说明可塑性强度达到应用架构师的考核标准
前端·javascript·人工智能·react.js·java-ee·ecmascript
Rust研习社30 分钟前
Rust Default 特征详解:轻松实现类型默认值
开发语言·后端·rust
jiayong2331 分钟前
第 25 课:给学习笔记页加上搜索、标签筛选和 URL 同步
开发语言·前端·javascript·vue.js·学习