zoukankan      html  css  js  c++  java
  • 《深入理解ES6》之Symbol

      ES6在原有的5中原始类型:字符串、数字型、布尔型、null和undefined的基础上,引入了一种原始类型Symbol(可以通过typeof检测变量是否为Symbol类型)。

    Symbol的使用方法

      所有使用可计算属性名的地方,都可以使用Symbol。

    let firstName=Symbol("first name");
    let person={
        [firstName]:"jia"
    };
    Object.defineProperty(person,firstName,{writable:false});
    let lastName=Symbol("last name");
    Object.defineProperties(person,{
        [lastName]:{
            value:"nuo",
            writable:false
        }
    });
    console.log(person[firstName]);//jia
    console.log(person[lastName]);//nuo

    Symbol共享体系

      ES6提供了可以随时访问的全局Symbol注册表,使用Symbol.for()方法。它只接受一个参数。可以用Symbol.keyFor()方法在Symbol全局注册表中检索与Symbol有关的键。

    let uid=Symbol.for("uid");
    let object={
        [uid]:"12345"
    };
    console.log(object[uid]);//12345
    console.log(uid);//Symbol(uid)
    let uid2=Symbol.for("uid");
    console.log(uid===uid2);//true
    console.log(object[uid2]);//12345
    console.log(uid2);//Symbol(uid)
    console.log(Symbol.keyFor(uid));//uid
    console.log(Symbol.keyFor(uid2));//uid
    let uid3=Symbol("uid");
    console.log(Symbol.keyFor(uid3));//undefined

    Symbol与强制类型转换

      其它类型没有与Symbol逻辑等价的值。所以将Symbol与字符串拼接或者与数字运算都会报错。使用console.log()方法来输出Symbol的内容,它会调用Symbol的String()方法并输出有用的信息。

    let uid=Symbol.for("uid"),
        desc=String(uid);
    console.log(desc);//Symbol(uid)
    sum=desc/1;//报错
    sum2=desc+"";//报错

    well-known Symbol操作

    well-known Symbol 详细意思
    Symbol.hasInstance 一个在执行instanceof时调用的内部方法,用于检测对象的继承信息。
    Symbol.isConcatSpreadable 一个布尔值,用于表示当传递一个集合作为Array.prototype.concat()方法的参数时,是否应该讲集合内的元素规整到同一个层级。
    Symbol.iterator 一个返回迭代器的方法。
    Symbol.match 一个在调用String.prototype.match()方法时调用的方法,用于比较字符串。
    Symbol.replace 一个在调用String.prototype.replace()方法时调用的方法,用于替换字符串的子串。
    Symbol.search 一个在调用String.prototype.search()方法时调用的方法,用于在字符串中定位子串。
    Symbol.species 用于创建派生类的构造函数
    Symbol.split 一个在调用String.prototype.split()方法时调用的方法,用于在字符串中定位子串
    Symbol.toPrimitive 一个返回对象原始值的方法
    Symbol.toStringTag 一个在调用Object.prototype.toString()方法时使用的字符串,用于创建对象描述
    Symbol.unscopables 一个定义了一些不可被with语句引用的对象属性名称的对象集合

    数字模式有以下特性,根据优先级的顺序排列:

    1. 调用valueOf()方法,如果结果为原始值,则返回。
    2. 否则,调用toString方法,如果结果为原始值,则返回。
    3. 如果再无可选值,则抛出错误。

    字符串模式有以下优先级排序:

    1. 调用toString()方法,如果结果为原始值,则返回。
    2. 否则,调用valueOf()方法,如果结果为原始值,则返回。
    3. 如果再无可选值,则抛出错误。
  • 相关阅读:
    MyCat 数据库读写分离
    python 网络编程-05 socketserver
    python 网络编程-04 文件的传输
    python 网络编程-03 粘包问题及处理
    常用模块-01getopt
    js获取自动获取本电脑IP
    js变态需求
    js正则不能输入中文和英文
    禁止输入中文
    手机号3-4-5
  • 原文地址:https://www.cnblogs.com/jiaxiaonuo/p/7367944.html
Copyright © 2011-2022 走看看