ES6-symbol-创建symbol

ES6-symbol-创建symbol

  // 1. ES 6 为引入 Symbol 类型?
        // 为了确保每个属性的名称都是独一无二的,从根本上防止属性名的冲突。
        // 引入 Symbol 类型之后,对象的属性名就有了两种类型,一种是 String 类型的数据,另一种就是 Symbol 类型的数据

        // 2. 怎样创建 Symbol 类型的数据呢?
        // 其他 5 种原始类型都有各自的字面量形式,而 Symbol 没有字面量形式,但是可以通过全局的 Symbol 函数创建一个 Symbol 类型的数据。
        let firstName = Symbol();
        let lastName = Symbol();

        let obj = {};

        obj[firstName] = '李金健';

        console.log(obj)
        console.log(obj[firstName])
        console.log(obj[lastName])

        // 上面的代码创建了一个名为 firstName 的 Symbol,用它作为 obj 对象的属性名,并为属性复制为 '李金健',
        // 每当你想访问这个属性时一定要使用最初定义的 Symbol。
        // 例如 obj[firstName] 可以访问到之前添加的属性值,而使用另外一个 Symbol 类型的值 lastName 就不能访问。
        // 也就是说,你定义属性时使用的是哪个 Symbol,访问属性时也要使用使用哪个 Symbol。

        // 3. Symbol 函数接收一个可选参数,它可以让你添加一段文本,描述即将创建的 Symbol,方便我们进行阅读和调试。
        let firstName = Symbol('This is my first name');
        let obj = {};

        obj[firstName] = '刘逸云';

        console.log(obj[firstName])
        console.log(firstName)

        // 4. 我们可以使用 typeof 操作符检测变量的值是否为 Symbol 类型。

        let firstName = Symbol('This is my first name');
        console.log(typeof firstName);   // 'symbol'

        // 5. Symbol 的使用场景
        // 所有用到可计算属性名的地方,都可以用 Symbol。例如:

        // 1> 对象字面量的可计算属性名中
        let firstName = Symbol('This is my first name');
        let obj = {
            [firstName]: '王亚坡'
        };

        // 2> 在 Object.defineProperty() 方法中使用
        let lastName = Symbol('This is my last name')
        Object.defineProperty(obj, lastName, { value: '尼古拉斯' });

        // 3> 在 Object.defineProperties() 方法中使用

        let firstName = Symbol('This is my first name');
        let lastName = Symbol('This is my last name');

        let obj = {};

        Object.defineProperties(obj, {
            [firstName]: {
               value: '王亚坡',
               writable: false     
            },
            [lastName]: {
               value: '尼古拉斯',
               writable: false 
            }
        })

        console.log(obj[firstName])
        console.log(obj[lastName])
        console.log(obj)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值