6、Symbol和Symbol属性

第六章、Symbol和Symbol属性


1、创建Symbol
        let firstName = Symbol();
        
        Symbol是原始值,不可以使用new Symbol()创建
        
        Symbol接受一个可选参数,为Symbol添加文本描述,描述被存储在[[Description]]属性,该属性不可直接在代码中访问,只有
        调用Symbol的toString()方法才可以访问。
        
        Symbol的辨别方法:typeof检测
            let symbol = Symbol("test Symbol");
            console.log(typeof symbol);        //"symbol"
            
2、Symbol的使用方法
        所有使用可计算属性名的地方,都可以使用Symbol。
        Symbol也可以用于可计算对象字面量属性名、Object.defineProperty()方法黄蓉Object.defineProperties()方法的调用过程中。
        
3、Symbol共享体系
        ES6提供了一个可以随时访问的全局Symbol注册表。
        Symbol.for():创建一个可共享的Symbol。
                接受一个参数,即将创建的Symbol的字符串标识符,同样也被用于Symbol的描述。
                创建时首先在全局Symbol注册表搜索该键是否存在,存在即返回,否则创建且返回。
                
        Symbol.keyFor():在Symbol全局注册表中检测与Symbol有关的键。
        
        备注:Symbol全局注册表试营业类似于全局作用域的共享环境。当使用第三方组件时,尽量使用Symbol键的命名空间以减少命名冲突。
        
4、Symbol与类型强制转换
        不能将Symbol强制转换为字符串或数字类型。
        Symbol等价于布尔值true
        
5、Symbol属性检索
        Object.keys():返回对象中所有可枚举的属性名。
        Object.getOwnPropertyNames():返回对象中所有的属性名。
        以上两个方法都不支持返回对象的Symbol属性。
        Object.getOwnPropertySymbols():返回对象中所有的Symbol属性。
        
        备注:对象可以从原型链中继承Symbol属性。
        
6、通过well-known Symbol暴露内部操作
        ES6开放了JavaScript中常见的内部操作,并且通过预定义一些well-known Symbol来表示。
        每一个这类Symbol都是Symbol对选哪个的一个属性。
        这些well-known Symbol包括:
                1、Symbol.hasInstance:一个在执行instanceof时调用的内部方法,可用于检测对象的继承信息。
                2、Symbol.isConcatSpreadable:一个布尔值,用于表示传递一个集合作为Array.prototype.concat()方法的参数时,
                        是否应该讲集合内的元素规整到同一个层级。
                3、Symbol.iterator:一个返回迭代器的方法。
                4、Symbol.match:一个在调用String.prototype.match()方法时调用的内部方法,用于比较字符串。
                5、Symbol.replace:一个在调用String.prototype.replace()方法时调用的内部方法,用于替换字符串的子串。
                6、Symbol.search:一个在调用String.prototype.search()方法时调用的内部方法,用于在字符串中查找子串。
                7、Symbol.species:用于创建派生对象的构造函数。
                8、Symbol.split:一个在调用String.prototype.split()方法时调用的内部方法,用于分割字符串。
                9、Symbol.toPrimitive:一个返回对象原始值的方法。
                10、Symbol.toStringTag:一个在调用String.prototype.toString()方法时使用的字符串,用于创建对象描述。
                11、Symbol.unscopables:一个定义了一些不可被with语句引用的对象属性名称的对象集合。

发布了247 篇原创文章 · 获赞 23 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LiyangBai/article/details/103085325