zoukankan      html  css  js  c++  java
  • ES6新数据类型Symbol

    Symbol

    需计算字面量属性时使用

    const benz = Symbol('benz');
    const car = {
        [benz]: 'benz car'
    };
    
    const info = Symbol('my car info');
    
    // 此时定义info为可枚举属性
    Object.defineProperty(car, info, {
        value: 'benz car description',
        enumerable: true
    });
    
    // 定义price为不可枚举属性
    Object.defineProperty(car, 'price', {
        value: 1000000
    });
    

    注意上例中info与price均不可枚举,无法使用 for-in 遍历, 使用 Object.keys 也无法得到属性名。符号类型的属性均不可被枚举。

    共享符号

    Symbol.for 会搜索全局符号注册表,查找以传入的参数为键值,找到即返回该符号值,找不到再创建一个符号值并返回该值。
    Symbol.keyFor 可以根据符号值在全局符号注册表中返回检索出的键值。

    符号值的转换

    符号值无法转换为字符串和数字,所以将符号值做为对象属性所带来的效果是其他类型无法替代的。将符号值与字符串进行拼接时会发生错误。

    检索对象属性

    我们将对象的属性分为符号值属性和普通属性,使用 Object.keys 或者 Object.getOwnPropertyNames 可以拿到对象的普通属性,前者拿到的是可枚举的普通属性,后者是所有普通属性,这样是为了兼容ES5,ES6里新增了 Object.getOwnPropertySymbols 用来检索符号值属性,不管符号值属性可不可枚举都能拿到。

  • 相关阅读:
    Java中@Override注解的作用
    JAVA8 双冒号::的作用
    JAVA8 Stream
    梯度下降法推导,凸函数,收敛性推导
    Maven基础
    Openflow协议详解
    KeepAlive--高可用解决方案
    Spring Cloud Alibaba:Seata基础知识
    Spring Cloud Alibaba:Sentinel初始化监控和流控
    Spring Cloud Alibaba:Nacos配置中心
  • 原文地址:https://www.cnblogs.com/idiv/p/8394685.html
Copyright © 2011-2022 走看看