首页 > 其他 > 详细

Symbol新数据类型

时间:2020-09-02 22:35:22      阅读:55      评论:0      收藏:0      [点我收藏+]

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。

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

  

Symbol新数据类型

原文:https://www.cnblogs.com/wenaq/p/13603884.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!