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 用来检索符号值属性,不管符号值属性可不可枚举都能拿到。

  • 相关阅读:
    PHP四种界定符
    设计模式 单例模式与工厂模式
    PHP include与require的区别
    面向对象 static abstract interface 等知识点
    gogland golang 颜色&字体 colors&font 配置文件
    什么是游戏中的帧同步
    kcp协议详解
    kcp流模式与消息模式对比
    kcp源码走读
    kcp结构体字段含义
  • 原文地址:https://www.cnblogs.com/idiv/p/8394685.html
Copyright © 2011-2022 走看看