美文网首页
ES6功能教程

ES6功能教程

作者: 雷雨leiyu | 来源:发表于2021-05-23 22:35 被阅读0次

    Symbol

    ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。

    Symbol 值作为属性名时,该属性是公有属性不是私有属性,可以在类的外部访问。但是不会出现在 for...in 、 for...of 的循环中,也不会被 Object.keys() 、 Object.getOwnPropertyNames() 返回。如果要读取到一个对象的 Symbol 属性,可以通过 Object.getOwnPropertySymbols() 和 Reflect.ownKeys() 取到。

    let sy = Symbol("KK");
    console.log(sy);   // Symbol(KK)
    typeof(sy);        // "symbol"
    // symbol作为键名
    let syObject = {
      [sy]: "kk"
    };
    

    Proxy

    Proxy是在对象的外层搭了一层拦截,任何对象的操作都要经过这层拦截。

    • Proxy对象有两个参数target与handler
    • handler方法:get, set, apply,
    const target = {name: "dennis"};
    const handler = {get: function(target, key) {} };
    const proxy = new Proxy(target, handler);
    

    Reflect

    ES6 中将 Object 的一些明显属于语言内部的方法移植到了 Reflect 对象上,未来的新方法会只部署在 Reflect 对象上。

    • Reflect.get(target, name, receiver)
    • Reflect.set(exam, 'age', 25);
    let exam = {
        name: "Tom",
        age: 24,
        get info(){
            return this.name + this.age;
        }
    }
    Reflect.get(exam, 'name'); // "Tom"
    

    Map与Set

    • Map方法:get, set, forEach
    • Map可以与Array互换(Array.from)
    • Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
    let user = new Map([["key1", "value1"], ["key2", "value2"]]);
    // 合并Map
    var merged = new Map([...first, ...second]);
    

    Map与Object的区别

    • Object的键只能是字符串或者Symbols,而Map可以是任意值;
    • Map中的键值是有序的(FIFO),而Object则是无序的;
    • Map.size可以取得长度,但Object只能自己计算;
    • Object有原型,名字可能冲突;

    相关文章

      网友评论

          本文标题:ES6功能教程

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