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

相关推荐
Sally璐璐11 分钟前
Go语言变量声明与初始化详解
java·开发语言·golang
Stringzhua29 分钟前
Vue数据的变更操作与表单数据的收集【6】
前端·javascript·vue.js
luofeiju32 分钟前
交叉编译笔记
开发语言
StudyWinter1 小时前
【C++】仿函数和回调函数
开发语言·c++·回调函数·仿函数
乐~~~1 小时前
el-date-picker type=daterange 日期范围限制
javascript·vue.js·elementui
C4程序员1 小时前
北京JAVA基础面试30天打卡14
java·开发语言·面试
初遇你时动了情1 小时前
uniapp vue3 ts自定义底部 tabbar菜单
前端·javascript·uni-app
黑客影儿2 小时前
Go特有的安全漏洞及渗透测试利用方法(通俗易懂)
开发语言·后端·安全·web安全·网络安全·golang·系统安全
你好,我叫C小白3 小时前
C语言 常量,数据类型
c语言·开发语言·数据类型·常量
烛阴3 小时前
掌握 TypeScript 的边界:any, unknown, void, never 的正确用法与陷阱
前端·javascript·typescript