ES6功能教程

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有原型,名字可能冲突;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容