美文网首页
深入理解ES6六

深入理解ES6六

作者: 前端小兵 | 来源:发表于2017-09-18 22:36 被阅读14次

    Symbol

    • ES6新增的数据类型Symbol
    • 创建Symbol:通过去全局的Symbol函数创建一个SymbolSymbol函数接受一个可选参数,用于添加一段文本描述即将创建的Symbol,方便阅读和调试Symbol程序
    let firstName = Symbol('first name');
        let person = {};
    
        person[firstName] = 'Nicholas';
    
        console.log('first name' in person); //false
        console.log(person[firstName]); //'Nicholas'
        console.log(firstName); //'Symbol(first name)'
    
    • ES6扩展了typeof操作符,支持返回Symbol,可以用typeof来检测变量是否为Symbol类型.

    Symbol共享体系

    • ES6提供了一个可以随时访问的全局Symbol注册表,如果要创建一个可共享的Symbol,要使用Symbol.for()方法,该方法只接受一个参数,就是即将创建的Symbol的字符串标识符
    let uid = Symbol.for('uid');
    let object = {};
    
    object[uid]='12345';
    
    console.log(ojbect[uid]);
    console.log(uid);
    
    • Symbol.for()方法首先在全局Symbol注册表中搜索键为'uid'的Symbol是否存在,如果存在,直接返回已有的Symbol;否则创建一个新的Symbol,并使用这个键在Symbol全局注册表中注册,随即返回新创建的Symbol
    • 可以使用Symbol.keyFor()方法在Symbol全局注册表中检索与Symbol有关的键
    let uid = Symbol.for('uid');
    console.log(Symbol.keyFor(uid)); //'uid'
    
    let uid3 = Symbol('uid');
    console.log(Symbol.keyFor(uid3)) //undefined
    

    Symbol属性检索

    • ES6中新增Object.getOwnPropertySymbols()方法来检索对象中的Symbol属性,返回值是一个包含所有Symbol自由属性的数组
    let uid = Symbol.for('uid');
    let object = {
        [uid]: '12345'
    };
    let symbols = object.getOwnPropertySymbols(object);
    
    console.log(symbols.length);               //1
    console.log(symbols[0]);                   //'Symbol(uid)'
    console.log(object[symbols[0]])            //'12345'
    

    相关文章

      网友评论

          本文标题:深入理解ES6六

          本文链接:https://www.haomeiwen.com/subject/lcjisxtx.html