Symbol类型

Symbol类型

首先这是数据类型,和Number、String等一样,但是不同的是Symbol()函数不能与 new 关键字一起作为构造函数使用。

Symbol函数的出现是为了解决重名的问题,举一个简单的例子。

let a = 'Jack';
let b = 'Jack';
console.log(a == b);

很明显答案为true,但是世界上肯定会有两个人都叫Jack对吧,那如果我们需要a的数据,如何避免拿成b的呢,一般我们的方法都是加上前缀或者后缀来区分,比如Jack1、Jack2……,但是Symbol类型可以帮助我们解决这个问题。

let a = Symbol('Jack');
let b = Symbol('Jack');
console.log(a == b); // false
  1. 符号的基本使用方法

    符号类型使用函数Symbol()初始化,不能使用new,它并不是对象!

    let temp = Symbol();
    console.log(typeof temp); // symbol
    

    这样你就声明了一个独一无二的符号。当然你也可以给这个函数传入参数。

    let temp = Symbol('foo');
    console.log(temp); // Symbol(foo)
    
  2. 使用全局符号注册表

    Symbol.for()对每个字符串键都执行幂等操作。第一次使用某个字符串调用时,它会检查全局运行时注册表,发现不存在对应的符号,于是就会生成一个新符号实例并添加到注册表中。后续使用相同 字符串的调用同样会检查注册表,发现存在与该字符串对应的符号,然后就会返回该符号实例。

    举个例子

    let a = Symbol.for('foo');
    let b = Symbol.for('foo');
    console.log(a == b); // true
    

    但是使用Symbol()Symbol.for()创建出来的符号是不相同的

    let a = Symbol.for('foo');
    let b = Symbol('foo');
    console.log(a == b); // false
    

    注册表中使用的键同时也会被用作符号描述

    let a = Symbol.for();
    console.log(a); // Symbol(undefined)
    

    还可以使用 Symbol.keyFor()来查询全局注册表,这个方法接收符号,返回该全局符号对应的字 符串键。如果查询的不是全局符号,则返回 undefined。

    let a = Symbol.for('foo');
    console.log(Symbol.keyFor(a)); // foo
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值