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

  • 相关阅读:
    leetcode 11. 盛最多水的容器
    gluoncv 导入方式
    python import
    leetcode 55.跳跃游戏
    leetcode 31. 下一个排列
    gluoncv 下载预训练模型速度太慢
    gluoncv voc_detection
    shuf 按行打乱文本命令
    __call__
    @property 装饰器
  • 原文地址:https://www.cnblogs.com/idiv/p/8394685.html
Copyright © 2011-2022 走看看