ES6 symbol 以及symbol的简单应用

1.ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。
2.Symbol 值通过Symbol函数生成。
3.Symbol 函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。
4.ES2019 提供了一个实例属性description,直接返回 Symbol 的描述。
5.Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。
6.Symbol 值作为对象属性名时,不能用点运算符,要使用[]。
7.Symbol 值作为属性名时,该属性还是公开属性,不是私有属性。

let s = Symbol(); let obj = { [s]: function (arg) { ... } }; obj[s](123); 常用场景 定义一组常量,保证这组常量的值都是不相等的

DEMO1

const log = {}; log.levels = { DEBUG: Symbol('debug'), INFO: Symbol('info'), WARN: Symbol('warn') }; console.log(log.levels.DEBUG, 'debug message'); console.log(log.levels.INFO, 'info message');

DEMO2

const COLOR_RED = Symbol(); const COLOR_GREEN = Symbol(); function getComplement(color) { switch (color) { case COLOR_RED: return COLOR_GREEN; case COLOR_GREEN: return COLOR_RED; default: throw new Error('Undefined color'); } }

常量使用 Symbol 值最大的好处,就是其他任何值都不可能有相同的值了,因此可以保证上面的switch语句会按设计的方式工作。

作为对象的key属性, 防止对象属性被重写 let name = Symbol(); { plugin = {}; plugin[name] = 'plugin'; console.log(plugin[name]); //plugin } { let name = Symbol(); plugin[name] = 'user'; console.log(plugin[name]); //user } console.log(plugin) //{Symbol(): "plugin", Symbol(): "user"} console.log(plugin[name]); //plugin

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzjdp.html