es6——Symbol对象

1.理解

是什么?
Symbol
一种原始数据结构

为什么要有它?
表示独一无二的值,最大的用法用来定义对象的唯一属性名

2.使用

注意:symbol是数据类型 而不是对象
定义的时候可以接受一个字符串作为参数 作为标识

        let x = Symbol("i am unique");
        console.log(x);//Symbol(i am unique)
        console.log(typeof x);//Symbol

实际应用场景

作为属性名/定义常量

(1)作为属性名

        let x = Symbol("i am unique");
        console.log(x);//Symbol(i am unique)
        console.log(typeof x);//Symbol

        //写法一:
        let obj =  {};
        obj[x] = 'value';
        console.log(obj);//{Symbol(i am unique): 'value'}

        //写法二:
        let obj1 = {
            [x]:'value1'
        }
        console.log(obj1);//{Symbol(i am unique): 'value1'}

        //写法三:
        let obj2 = {};
        Object.defineProperty(obj2,x,{value:'value2'});
        console.log(obj2);//{Symbol(i am unique): 'value2'}

(2)定义常量

两个方法:

Symbol.key();

作用:全局搜索是否有有该字符串参数的Symbol值,如果有则返回Symbol值,如果没有则新建返回一个以该字符串为参数的Symbol值,并登记在全局环境中以便后续搜索。

注意区分和Symbol()创建的区别
后者就算字符串参数相同 得到的结果是不一样的 而前者后返回搜索到相同字符串对应的symbol

 let s = Symbol();
        console.log(s,typeof s);//Symbol() 'symbol'
        let  s2 = Symbol('Jackson');
        let s3 = Symbol('Jackson');
        console.log(s2 == s3);//false
        //Symbol.for创建 这里的Symbol是个对象
        let s4 = Symbol.for();
        let s01  = Symbol.for('jack');
        let s02 = Symbol.for('jack');
        console.log(s01 == s02);//true

Symbol.keyFor();
返回一个已登记的Symbol类型值的key,用来检测字符串参数作为Symbol值是否已被登记(

注意:
Symbol.keyFor()在全局注册表中找,而Symbol()创建的不会放在全局注册表中,每次都是新建,
Symbol()是在全局注册表中搜索 搜索到返回 搜索不到新建之后放在全局注册表中

let yellow1 = Symbol.for("why");
        Symbol.keyFor(yellow1);    // "Yellow"
        console.log(Symbol.keyFor(yellow1));

Symbol属性和方法参考以下文章
参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值