美文网首页
ES6 笔记 Symbol

ES6 笔记 Symbol

作者: yangweigbh | 来源:发表于2017-01-24 10:11 被阅读13次

    Symbol是为了解决属性名冲突的问题而引入的,想要创建不会冲突的属性,可以new一个Symbol,每个创建的Symbol是独一无二的,不会冲突

    var mySymbol = Symbol();
    
    obj[mySymbol] = "ok!";  // called symbol-keyed property, guaranteed not to collide
    console.log(obj[mySymbol]);  // ok!
    
    • 可以创建具有descriptionSymboldescription会在toString时打印出来

    • symbol-keyed property不能使用点号引用,需要使用方括号引用。

    • get 和 set symbol keyed property: element[Symbol]
      检查有没有属性: if (Symbol in element)
      删除属性: delete element[Symbol]

    • Symbol 离开作用域,这个属性就没法引用了

    • Object.getOwnPropertyNamesObject.keys(obj)不会返回Symbol keyed property。 Object.getOwnPropertySymbols(obj)返回symbol-keyed property。

    Symbol是单独的类型,Symbol不会自动转换成字符串,必须显示调用toString()

    > typeof Symbol()
    "symbol"
    

    有三类Symbol

    • Symbol创建的新的Symbol

    • Symbol.for(string) 重复返回统一Symbol

    • 标准里定义的Symbol,比如Symbol.iterator

    for (var item of myArray) 就是调用 myArray[Symbol.iterator]()返回一个迭代器

    相关文章

      网友评论

          本文标题:ES6 笔记 Symbol

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