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 值。

相关推荐
wjm0410069 分钟前
C++日更八股--first
java·开发语言·c++
三思而后行,慎承诺30 分钟前
react的fiber 用法
前端·javascript·react.js
wei38724523230 分钟前
java练习2
java·开发语言·python
我的golang之路果然有问题1 小时前
案例速成GO+Socket,个人笔记
开发语言·笔记·后端·websocket·学习·http·golang
我的golang之路果然有问题1 小时前
快速了解Go+rpc
开发语言·经验分享·笔记·rpc·golang·go
一眼青苔1 小时前
python中 str.strip() 是什么意思
开发语言·python
heyCHEEMS1 小时前
[USACO09OCT] Bessie‘s Weight Problem G Java
java·开发语言·算法
阿伟来咯~1 小时前
vue3+Nest.js项目 部署阿里云
开发语言·javascript·ecmascript
爱编程的鱼2 小时前
C# 继承详解
开发语言·c#
MyhEhud2 小时前
kotlin flatMap 变换函数的特点和使用场景
开发语言·windows·kotlin