微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ES6-Symbol

// Symbol 声明的变量独一无二
{
    let a1 = Symbol();  //Symbol 前面不能用new,因为生成的Symbol是一个原始类型的值,不是对象
    let a2 = Symbol();
    console.log(a1===a2)  //false

    let a3 = Symbol.for('a3');  //Symbol.for(),接受一个参数,作为key值,在作用域内搜索,有没有以这个参数命名的值,如果有,就返回Symbol值,没有就创建一个以该参数命名的Symbol值
    let a4 = Symbol.for('a3');
    console.log(a3===a4)   //true
}
{
    // let a = 'abc';
    let a = Symbol.for('abc');
    let obj = {
        [a]:'111',    //取a1变量作为key值,用Symbol得到的key值用let of和for in是取不到Symbol的key值的
        abc:'345'
    }
    console.log(obj)
    //for in ,let of 获取常规键名
    for(let [key,value] of Object.entries(obj)){
        console.log('let of ',key,value)  //abc 345
    }
    //Object.getownPropertySymbols方法获取指定对象的所有 Symbol 键名
    // 得到的是一个数组,可以调用数组的方法
    Object.getownPropertySymbols(obj).forEach(function(item){
        console.log(obj[item])             //111
    });
    //Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和 Symbol 键名
    Reflect.ownKeys(obj).forEach(function(item){
        console.log(item,obj[item])  // abc  111  Symbol(abc) "111"
    })
}

可以参考ES6文档:ES6 symbol

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐