ES6新数据类型symbol介绍

symbol是ES6中新增的原始数据类型,表示独一无二的值。经常被用于对象的唯一属性名。

具体使用方式如下:

  useEffect(() => {
        console.log(type, '------------------3-----');
        fn()
    }, [])
    const fn = () => {
        //    方法1
        let s1 = Symbol('key1')
        let obj = { [s1]: '值1' }
        console.log(obj, '-------1---'); //{Symbol(key1): '值1'}
        //方法2
        obj[s1] = '值2'
        console.log(obj, '--------------2---'); //{Symbol(key1): '值2'}
        //方法3
        Object.defineProperty(obj, s1, { value: '值3' })
        let o =Reflect.ownKeys(obj)   //Reflect.ownKeys()
        console.log(obj, o, '---------------3--'); //{Symbol(key1): '值3'} ,[Symbol(key1)]

    }

在创建symbol时传入的字符串是对symbol的描述便于区分,即使创建的两个symbol传入的字符串都是’key1‘也是不等的,因为symbol是独一无二的,因此作为对象属性名时可以保证不重名。

需要注意的是 symbol是不会出现在for...in  ,for...of  中,并且也不会被Object.keys() 、Object.getOwnPropertyNames() 所返回,可以用Reflect.ownKeys()和Object.getOwnPropertySymbols()获取到。

还可以用symbol来定义常量,能保证常量的独特性。

Symbol.for() 首先会在全局找是否有以该字符串为名称的symbol值,如果有则返回该值;如果没有则会在全局环境中创建一个以该字符串参数为名称的symbol值 。

Symbol.keyFor()  返回一个已经登记的symbol的key ,可用于查询是否已有这个字符串为名称登记的symbol。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值