zoukankan      html  css  js  c++  java
  • es6-9 Symbol

    Symbol 声明变量的值都是唯一的, 独一无二的
    {
        // 声明
        let a1 = Symbol()
        let a2 = Symbol()
        console.log(a1 == a2); // false
        console.log(a1 === a2); // false
    }
    Symbol.for() 声明独一无二变量的时候会检测这个 key 值是否在全局注册过, 如果注册过就返回注册值, 没有生成一个独一无二的值
    {
        let a3 = Symbol.for('a3')
        let a4 = Symbol.for('a3')
        console.log(a3 === a4); // true
    }
    使用场景, 当存在声明的变量还要声明且不覆盖的情况下
    {
        let a1 = Symbol.for('abc');
        let obj = {
            [a1]: 'my abc',
            'abc': '456',
            'c': '789'
        }
        console.log(obj) // {abc: "456", c: "789", Symbol(abc): "my abc"}
    }
    对象中要是有 Symbol 做配值的话, for of for in 都是拿不到值的
    {
        let a1 = Symbol.for('abc');
        let obj = {
            [a1]: 'my abc', // 不会覆盖下边的 abc
            'abc': '456',
            'c': '789'
        }
        console.log(obj) // {abc: "456", c: "789", Symbol(abc): "my abc"}
    
        for (let [key, value] of Object.entries(obj)) {
            console.log(key, value); // abc-456 c-789
        }
    }
    Object.getOwnPropertySymbols() 取 Symbol 的值, 但是只能取出 Symbol 的值
    {// Object.getOwnPropertySymbols 取 Symbol 的值
        Object.getOwnPropertySymbols(obj).forEach((item) => {
            console.log(obj[item]) // my abc 取出来了
        })
    }
    Reflect.ownKeys() 都拿出来
    {
        // 能不能都拿出来呢
        Reflect.ownKeys(obj).forEach(item => {
            console.log('ownKeys', item, obj[item]) // abc-456 c-789 Symbol(abc)-my abc
        })
    }
  • 相关阅读:
    java页面请求跑批处理sql的有关问题
    Linux下一个检查跑批是否成功的Shell
    redhat Linux5 安装vsftp .
    LINUX FTP简单配置
    java代理机制
    详细解析Java中抽象类和接口的区别
    抽象类和接口的区别
    SVN与Git比较
    浅谈存储过程和触发器
    存储过程,触发器,函数 学习总结
  • 原文地址:https://www.cnblogs.com/helzeo/p/11814310.html
Copyright © 2011-2022 走看看