ES6 新增的类型Symbol

我会带着你远行 2022-12-29 01:37 219阅读 0赞

Symbol 是ES6中新增的一种数据类型,是唯一的标识符,可以作为对象的唯一属性名;
Symbol 可以代替一个常量,指的常量的值唯一;
Symbol 的特点:

唯一性:即使两个变量类型,值都一样,也不相等;

  1. let id1 = Symbol('id');
  2. let id2 = Symbol('id');
  3. console.log(id1 == id2); //false

隐藏性: 用 [] 标识的symbol类型作为对象的属性的时候,不能被for in 访问

  1. let id = Symbol("id");
  2. let obj = {
  3. [id]:'symbol'
  4. };
  5. for(let option in obj){
  6. console.log(obj[option]); //空
  7. }

但是也可以通过方法访问:Object.getOwnPropertySymbols

  1. let id = Symbol("id");
  2. let obj = {
  3. [id]:'symbol'
  4. };
  5. let array = Object.getOwnPropertySymbols(obj);
  6. console.log(array); //[Symbol(id)]
  7. console.log(obj[array[0]]); //'symbol'

虽然这样保证了Symbol的唯一性,但我们不排除希望能够多次使用同一个symbol值的情况。
为此,官方提供了全局注册并登记的方法:Symbol.for()

  1. let name1 = Symbol.for('name'); //检测到未创建后新建
  2. let name2 = Symbol.for('name'); //检测到已创建后返回
  3. console.log(name1 === name2); // true

通过Symbol.keyFor() 获取参数值

  1. let name1 = Symbol.for('name');
  2. let name2 = Symbol.for('name');
  3. console.log(Symbol.keyFor(name1)); // 'name'
  4. console.log(Symbol.keyFor(name2)); // 'name'

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6--Symbol类型

    概述 ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。 ES6 数据类型除了 Number 、 Strin