zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    深入NET框架
    解决idea中maven的pom文件不会自动下载jar包问题
    JSP中的作用域
    转发与重定向
    JSP内置对象
    JNDI与连接池
    文件上传
    七大设计原则
    第六章 初始继承和多态
    C#和.NET框架
  • 原文地址:https://www.cnblogs.com/zynkl1314/p/12017198.html
Copyright © 2011-2022 走看看