• Symbol新数据类型


    Symbol新数据类型


    symbol解决了 重命名的问题,解决对象的属性名冲突。

    描述信息 每个Symbol都是独一无二的 通过遍历是获取不到symbol 使用 Object.getOwnPropertySymbols
        let name2 = Symbol("name");
        let age = Symbol("age");
        let name1 = Symbol("name");
        console.log(name1);
        console.log(name1 == name2);//false
    

      

    不能遍历

    let obj = {
            name: '名字',
            [name1]: "shdkjdshg",
            [name2]: "sdfhs"
        }
        console.log(Object.keys(obj));//数组长度为1
        for (let key in obj) {
            console.log(key);//name 不能遍历Symbol
        }
    

      

    在对象中,获取symbol  要加 []

        let sym = Symbol();
        console.log(sym);
        let sym2 = Symbol();
        console.log(sym == sym2);//false 每个Symbol都是独立的
    
        //对象
        let obj = {
            name:"张三",
            [sym]:"Symbol太厉害了"
        }
        console.log(obj.sym);//undefined
        console.log(obj[sym])// Symbol太厉害了//[}

    symbol常用方法:

    1、Object.getOwnPropertySymbols函数 获取symbol类型的属性

        console.log(Object.getOwnPropertySymbols(obj));
        Object.getOwnPropertySymbols(obj).forEach(item => {
            console.log(item);
        })
    

      

    2、Reflect.ownKeys函数 同时获取字符串类型的属性和获取symbol类型的属性

        console.log(Reflect.ownKeys(obj));
        Reflect.ownKeys(obj).forEach(item => console.log(obj[item]))
    

      

    3、Symbol.for函数 函数作用:根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值

        let n1 = Symbol.for('name');
        let n2 = Symbol.for('name');
        console.log(n1==n2);//true
        let n3 = Symbol('name');
        console.log(n1==n3);//false
    

      

    4、KeyFor 函数作用:返回一个以被登记在全局环境中的symbol值的key,没有就返回undefined。

    全局的symbol

    let sym1 =  Symbol.for("name")

    如果name在全局未创建,则会在全局创建Symbol

    如果name已经创建了,则会返回全局的Symbol

        let n3 = Symbol('name');
        console.log(n1==n3);//false
        console.log(Symbol.keyFor(n1));//name
        console.log(Symbol.keyFor(n3));//undefined
    

      

  • 相关阅读:
    图文详解k8s自动化持续集成之GitLab CI/CD
    GitLab CI/CD 进行持续集成
    高性能伪事务之Lua in Redis
    面向对象之组合VS继承:继承过时了?
    Go依赖模块版本之Module避坑使用详解
    Maven3路程(三)用Maven创建第一个web项目(1)
    C#通过WIN32 API实现嵌入程序窗体
    Selenium自動化測試(Python+VS2013)-基礎篇-環境安裝
    VS2013中Python学习笔记[环境搭建]
    win7 windows server 2008R2下 https SSL证书安装的搭配(搭配https ssl本地测试环境)
  • 原文地址:https://www.cnblogs.com/wenaq/p/13603884.html
Copyright © 2020-2023  润新知