美文网首页
2018-01-16 -02 ES6 阮一峰教程摘记7

2018-01-16 -02 ES6 阮一峰教程摘记7

作者: 安乐_f487 | 来源:发表于2018-09-10 21:59 被阅读0次

    Symbol

    1.概述

    es6引入的一种新的原始数据类型(目前共7种数据类型,Object对象,以及6种原型数据类型:Undefined,Null,Number,String,Boolean,Symbol),表示独一无二的值;

    引入原因:防止属性名的冲突

    使用:

    let symbol_example=Symbol(symbol_description);  //可以接受一个字符串作为参数,只是表示对Symbol实例的描述,以便区分;---注意:即使两个Symbol实例的描述相同,这两个实例也不会相等

    symbol_example.toString(); //Symbol(symbol_description)

    注意:

    1)Symbol值不能参与运算,会报错

    2)Symbol值可以转换成字符串

    symbol.toString();  或  String(symbol);

    3)Symbol值可以转换为boolean值,但不能转换成Number值

    2.作为属性名

    三种写法:

    注意,不能使用.运算符,如a.mySymbol会报错,必须放在[]中

    Symbol值作为属性名时,该属性还是公开属性,而不是私有属性

    3.实例:消除魔术字符串

    --降低代码的耦合

    常用的消除魔术字符串的方法,就是把它写成一个变量

    魔术字符串例子

    利用Symbol改写如下:

    4.属性名的遍历

    可以获取Symbol属性名的方法有:

    1)Object.getOwnPropertySymbols(obj)

    2)新的API:Reflect.ownKeys()--返回所有类型的键名,包括常规键名和 Symbol 键名

    Reflect.ownKeys()例子

    由于以 Symbol 值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法??

    5.Symbol.for(),Symbol.keyFor()

    Symbol.for():可以实现重新使用同一个Symbol值,可以接受一个字符串参数,若有以该参数作为名称的 Symbol 值,就返回Symbol值,否则就创建一个;

    Symbol.for()的使用示例

    Symbol.keyFor():返回一个已登记的 Symbol 类型值的key

    Symbol.keyFor()的使用示例

    需要注意的是,Symbol.for为 Symbol 值登记的名字,是全局环境的,可以在不同的 iframe 或 service worker 中取到同一个值

    6.实例:模块的singleton模式

    singleton模式:调用一个类,任何时候返回的都是同一个实例

    例子是node模块文件的??

    7.内置的Symbol值--内部使用的方法

    ES6 提供了 11 个内置的 Symbol 值,指向语言内部使用的方法???

    (1)Symbol.hasInstance属性,指向一个内部方法。当其他对象使用instanceof运算符,判断是否为该对象的实例时,会调用这个方法

    (2)Symbol.isConcatSpreadable

    该属性等于一个布尔值,表示该对象用于Array.prototype.concat()时,是否可以展开

    (3)Symbol.species

    (4)Symbol.match

    (5)Symbol.replace

    (6)Symbol.search

    (7)Symbol.split

    (8)Symbol.iterator (遍历器方法)

    (9)Symbol.toPrimitive

    (10)Symbol.toStringTag

    (11)Symbol.unscopables  with关键字

    相关文章

      网友评论

          本文标题:2018-01-16 -02 ES6 阮一峰教程摘记7

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