美文网首页
深入理解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