• ES6 Symbol


    基本概念

    JavaScript的第七种数据类型

    var s=Symbol();
    
    Symbol()===Symbol() //false
    
    Symbol("foo")===Symbol("foo") //false
    
    typeof Symbol==="symbol" //true

    注意点

    (1)Symbol()中的参数是该Symbol的描述。传入对象时会自动调用toString()方法转换为字符串。

    (2)Symbol()定义对象的属性时,需要用方括号设置或读取。.运算符后面总是字符串,而Symbol()类型不是字符串。

    (3)获取对象的Symbol()类型属性时,调用Object.getOwnPropertySymbols方法或Reflect.ownKeys方法。Reflect.ownKeys返回的是Object.getOwnPropertySymbols()+Object.getOwnProperties()。

    (4)symbol的弱封装机制:模块创建了几个symbol,可以在任意对象上使用,无须担心与其它代码创建的属性产生冲突。

    API

    Symbol.for()

    相同点:都能成一个新Symbol()

    不同点:新创建的Symbol.for()会注册在symbol表中,该symbol注册表不包括Symbol()定义的symbol。第二次调用时直接在symbol注册表中查询。Symbol.keyFor() 用来获取注册表Symbol类型值的key。

    内置Symbol

    Symbol.iterator

    指向对象默认的遍历器方法,for...of循环时,会调用该方法

    Symbol.hasInstance    

    调用obj instanceof Object 相当于调用了 Object[Symbol.hasInstance](obj)

    Symbol.isConcatSpreadable

    用来定义对象是否能够展开,默认undefined,可转化为true可展开,设置false不能展开

    Symbol.species

    在基类上修改的类库,在使用继承方法时,返回的是子类的实例,如果想返回基类的实例,可以在子类中定义存取器get [Symbol.species](){return parent}来实现

    Symbol.toStringTag

    定制调用toString方法返回[object xxx]中的xxx  [object 对象的类型] 为Object.prototype.toString的返回值,可用来确定对象的类型,比typeof要准确

    Symbol.unscopables

    对象的Symbol.unscopables属性,指向一个对象。该对象指定了使用with关键字时,哪些属性会被with环境排除。

    相似API

    Symbol.match | Symbol.replace | Symbol.search | Symbol.split

    ES5的String.prototype.match(obj)会自动将obj转换成一个RegExp正则表达式对象。现在我们可以传入一个自定义的包含Symbol.match方法的类来匹配。

    Symbol.toPrimitive

    对象的Symbol.toPrimitive属性,指向一个方法。该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值。

    用法

    (1)消除魔术字符串,类似于枚举对象

    (2)消除新旧代码的冲突,Symbol.unscopables

    (3)使instanceof可扩展,Symbol.hasInstance

    (4)支持新的字符匹配类型,Symbol.match

    ->国外开发者的见解

  • 相关阅读:
    对于Dubbo一些面试题自己的答案
    序列化和反序列化的简单理解
    学习Spring-Session+Redis实现session共享
    Java中的String,StringBuilder,StringBuffer三者的区别
    个人对数据结构的理解和总结
    LeetCode 101. Symmetric Tree
    LeetCode 100. Same Tree
    LeetCode 88. Merge Sorted Array
    LeetCode 83. Remove Duplicates from Sorted List
    LeetCode 70. Climbing Stairs
  • 原文地址:https://www.cnblogs.com/goOtter/p/9570317.html
Copyright © 2020-2023  润新知