前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6学习笔记-Symbol

ES6学习笔记-Symbol

作者头像
破晓之翼
发布2022-12-01 08:09:30
2350
发布2022-12-01 08:09:30
举报
文章被收录于专栏:产品能力

ES5​的​对象属性名​都是​字符串​,这容易造成​属性名​的冲突

ES6​引入了一种新的原始数据类型​Symbol​,表示​独一无二的值​。

它是​JavaScript​语言的​第七种​数据类型,前六种是:​Undefined​、​Null​、​布尔值(Boolean)​、​字符串(String)​、​数值(Number)​、​对象(Object)​。

Symbol​值通过​Symbol函数​生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型。

凡是属性名属于​Symbol​类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

代码语言:javascript
复制
let s = Symbol();
console.log(typeof s)        //  symbol

上面代码中,变量s就是一个独一无二的值。typeof运算符的结果,表明变量s是Symbol数据类型,而不是字符串之类的其他类型。

Symbol​函数可以接受一个​字符串​作为​参数​,表示对​Symbol​实例的描述。这主要是为了在控制台显示或者转为字符串时,比较容易区分。

代码语言:javascript
复制
var s1 = Symbol('foo');
var s2 = Symbol('bar');

console.log(s1,s2)    // Symbol(foo)   Symbol(bar)    如果不加参数,输出都是Symbol(),不能区分

每个Symbol类型都是​独一无二的值,体现在下面这段代码中:

代码语言:javascript
复制
var a= Symbol("aaa");
var b= Symbol("aaa");

a===b         //    false    a和b是不相等的

Symbol​值不能与其他类型的值进行运算,会报错。但是,​Symbol​值可以显式转为字符串

代码语言:javascript
复制
 var sym = Symbol('a symbol');
//两种方法都可以转为字符串

String(sym)     //  'Symbol(a symbol)'
sym.toString()     //  'Symbol(a symbol)'

由于每一个​Symbol​值都是​不相等​的,这意味着​Symbol​值可以作为​标识符​用于对象的属性名,这就能保证不会出现同名的属性。

推荐两种写法:

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

// 第一种写法
let student= {};
student[name] = 'jack!';    //  Symbol值name作为student的属性

// 第二种写法
let student= {
  [name]: 'jack!'        //注意要使用方括号包裹,不放在方括号中,该属性的键名就是字符串
};

注意:Symbol值作为对象属性名时,不能用点运算符,要使用方括号

因为​点运算符​后面总是​字符串​,所以不会读取name作为​标识名​所指代的那个值,导致student的属性name名实际上是一个​字符串​,而不是一个Symbol值。如以下代码就不是Symbol值作为属性。

代码语言:javascript
复制
student.name= 'jack';

取值对象的Symbol类型的属性也要用方括号。普通属性是直接用点运算符。

3.Symbol​类型还可以用于​定义一组常量​,保证这组常量的值都是不相等的。

代码语言:javascript
复制
levels = {
  DEBUG: Symbol('debug'),
  INFO: Symbol('info'),
  WARN: Symbol('warn')
};
console.log(levels.DEBUG)        //  Symbol(debug)
console.log(levels.INFO)           //   Symbol(info)
console.log(levels.WARN)         //  Symbol(warn)

常量​使用​Symbol​值最大的好处,就是其他任何值都不可能有相同的值了。

 ​Symbol ​的值是唯一的,所以不会出现相同值的常量

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档