唯一的标识符
有两种原始类型可以作为对象的键(key):1、字符串,2、Symbol()。
用法:
- Symbol('描述') 创建Symbol类型值
- Symbol.description 获取Symbol描述
let id = Symbol('1'); // 括号是描述,即这个标识符的名字,
// 获取描述 id.description // '1'
Symbol('1') === Symbol('1') // false
作用:向对象里添加一个唯一的key名。
“忍者:隐藏属性”
比如第三方代码的对象,你想添加另外的属性,但第三方代码中有可能会设置了本来预设的对象key值,如果你通过Symbol作为key值,就会变成一个“隐藏属性”,就不会被意外访问和重写了
Symbol作为key,即起到隐藏符号属性,会在 for in 以及 Object.keys() 不会被遍历出来。
但是在通过Objcet.assgin(),会同时复制字符串和Symbol的属性
Symbol 全局注册表
- Symbol.for()
通过Symbol.for() 按名字返回一个Symbol 。如果没有将被创建(在注册表中注册),通过描述名就可以取到相同的Symbol了,(查找和创建全局功能)
如果需要取到同一个Symbol,就通过全局注册Symbol.for注册,使用Symbol.for就会获取到同一个Symbol
let id = Symbol.for('id');
let id2 = Symbol.for('id')
id == id2 // true
- Symbol.keyFor()
Symbol.KeyFor()按Symbol返回一个名字。但仅限在全局中查找Symbol,如果在全局中没有则返回Undefined。(不适用于非全局 symbol)
let id = Symbol('id')
let id2 = Symbol.for('id2')
let a = Symbol.keyFor(id) // undefined
let b = Symbol.keyFor(id2) // id2
标签:数据类型,Symbol,id2,js,let,key,全局,id
From: https://www.cnblogs.com/lazyxlai/p/16862294.html