js 数据类型 Symbol

唯一的标识符

有两种原始类型可以作为对象的键(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
posted @ 2022-11-06 11:44  小赖不赖  阅读(120)  评论(0)    收藏  举报