阅读 218

ES6的新特性之Symbol关键字

Symbol

概述

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefinednull、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

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

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

let s = Symbol('foo');
s // Symbol(foo)
s.toString() // "Symbol(foo)"复制代码

Symbol 值不能与其他类型的值进行运算,会报错。

let sym = Symbol('My symbol');

"aaa" + sym
// TypeError: can't convert symbol to string复制代码

Symbol.prototype.description

创建 Symbol 的时候,可以添加一个描述。

const sym = Symbol('foo');复制代码

ES2019提供了一个实例属性description,直接返回 Symbol 的描述。

const sym = Symbol('foo');

sym.description // "foo"复制代码

作为属性名的 Symbol

let mySymbol = Symbol();

let a = {};
a[mySymbol] = 'Hello!';复制代码

注意,Symbol 值作为对象属性名时,不能用点运算符。

Symbol.for()

Symbol.for()Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

Symbol.for("bar") === Symbol.for("bar")
// true

Symbol("bar") === Symbol("bar")
// false复制代码

symbol.for()创建  参数是键 键一样结果一样,symbol()创建 参数是描述 描述一样其实是不一样的值。


作者:偏爱自由_
链接:https://juejin.cn/post/7018540288146669604


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐