十、前端基础之Symbol

 //ES6新增数据类型Symbol Set(new) Map(new)

        // Symbol不能用new关键字(提出:解决属性名重复导致属性值被覆盖的问题)

        // Symbol表示唯一性 既不相等也不全等

        console.log(NaN === NaN);

        console.log(Symbol('') === Symbol(''));

        // 参数作为修饰(代表性) 避免混淆

        console.log(Symbol('pg') === Symbol('sg'));

        // Symbol 作为属性对象

        var s = Symbol()

        var obj = {

            [s]:'A'

        }

        var person = {

            name:'小明',

            age:12,

            [Symbol('level')]:'A'

        }

        for(var i in person){

            // Symbol属性打印不出来

            console.log(i);

        }

        // 并不具备迭代器的接口 Symbol.iterator 会报错

        // for(var i of person){

        //     console.log(i);

        // }

        console.log(Object.keys(person));

        console.log(Object.getOwnPropertySymbols(person));

        // 返回目标对象自身属性键的数组

        console.log(Reflect.ownKeys(person));

        console.log(Object.getOwnPropertyNames(person));

       

       

        //为了重新使用同一个Symbol值 使用Symbol.for()方法实现

        let s1 = Symbol.for('foo')

        let s2 = Symbol.for('foo') //在创建前在全局中寻找有没有用Symbol.for并且key是foo的字符窜创建Symbol,有则不再创建直接使用

        console.log(s1 === s2); //true

        // 返回已登记的Symbol类型值的key

        Symbol.keyFor(s1) //foo

        // Symbol的使用场景

            // var game = {

            //     pg:'控球后卫',

            //     sg:'得分后卫',

            //     sf:'小前锋'

            // }

            var game = {

                pg:Symbol('pg'),

                sg:Symbol('sg'),

                sf:Symbol('sf')

            }

            function createRole(type){

                if(type === game.pg){

                    console.log('控球后卫');

                }else if(type === game.sg){

                    console.log('得分后卫');

                }else if(type === game.sf){

                    console.log('小前锋');

                }

            }

            // createRole('控球后卫')

            createRole(game.pg)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值