• Nigerian expat advocates one 2019-05-16
  • 河北省交通运输厅:平安交通一路同行 2019-05-11
  • 钱江晚报:乱花的治霾资金要追回更需追责 2019-04-28
  • 慈善基金进社区 点对点帮扶居民 2019-04-10
  • 三面悬崖的3197哨所 战士背饮用水要走"天梯" 2019-04-10
  • 习近平《在深入推动长江经济带发展座谈会上的讲话》单行本出版 2019-04-09
  • 女子在自家院子乘凉 被后山滚落千斤巨石砸死 2019-04-07
  • 很深刻。当今城市化基本出于房地资本的繁衍需要与维持粗陋GDP的无奈,越来越显露其反动性。 2019-04-03
  • 故都之秋,惊艳了整个华东文章中国国家地理网 2019-04-03
  • 中国虚拟现实创新创业大赛南昌赛区颁奖仪式举行 2019-03-31
  • 邯郸“廉政诊所”筑起基层首道廉政防线 2019-03-31
  • 蔡英文,赖清德,李登辉,陈水扁..... 2019-03-24
  • 【北京海之沃车型报价】北京海之沃4S店车型价格 2019-03-22
  • 上海电影节第三日:电影市场热议产业新形势 2019-03-22
  • 特朗普雇佣资深律师应对涉俄调查 2019-03-18
  • 黑龙江p62历史开奖结果

    体彩排列3走势图:ES6 中的 Set、Map 和 WeakMap

    稿件来源: 阳光企业网站管理系统   撰稿作者: 太阳光   发表日期: 2015-07-20   阅读次数: 43   查看权限: 游客查看

    ES6 新增了几种集合类型,本文介绍 Set、Map 和 WeakMap。比较新的 Firefox、Chrome(需要在 about:flags 启用实验性 JavaScript)以及 IE11 都有不同程度的实现。需要注意的是,ES6 规范会一直调整,本文只以当前规范及浏览器实现为准。

    Set

    黑龙江p62历史开奖结果 www.tgpe.net Set 是 ES6 新增的有序列表集合,它不会包含重复项。之前我们通常用对象(Object)或者数组(Array)来实现没有重复项的集合。但对象会对 key 进行 toString() 操作,这会导致某些 key 会意外覆盖之前的数据;如果 key 本身是一个对象,toString() 也得不到想要的结果,如下:

    var o = {};
    
    var key1 = 2;
    var key2 = { toString : function() { return 2 } };
    
    var key3 = { x : 1 };
    var key4 = { y : 2 };
    
    o[key1] = 1;
    o[key2] = 2;
    o[key3] = 3;
    o[key4] = 4;
    
    // o : Object {2: 2, [object Object]: 4}

    数组可以存放任何类型的数据,不过数据除重需要自己实现。

    Set 支持 add(item) 方法,用来向 Set 添加任意类型的元素,如果已经添加过则自动忽略;has(item) 方法用来检测 Set 中是否存在指定元素;delete(item) 方法用来从 Set 中删除指定元素;clear() 用来清空 Set;获取 Set 集合长度用 size 属性。如下:

    var set = new Set();
    set.add(window);
    set.has(window); // true
    set.size; // 1
    set.add(window);
    set.add(1);
    set.size; // 2
    set.delete(window);
    set.has(window); // false
    set.clear();
    set.size; // 0

    Set 调用 add、has、delete 等方法时对 key 进行的比较,不做类型转换??梢匀衔褂谩?==」进行比较,当然也不全是「===」:

    • Set 中,NaN 只能添加一次(虽然NaN === NaN 返回 false);
    • Set 中,「-0」和「0 或 +0」可以同时存在,因为符号不一样(虽然 -0 === 0 或 -0 === +0 返回 true);

    Map

    Map 是 ES6 新增的有序键值对集合。键值对的 key 和 value 都可以是任何类型的元素。通过 set(key, value) 方法为 Map 设置新的键值对,如果设置的 key 已经存在则用新的 value 覆盖,Map 在比较 key 时也不做类型转换,跟 Set 类似;Map 的 get(key) 方法用来获取指定 key 的值;Map 的 has(key) 、 delete(key) 、clear() 这些方法和 size 属性,与 Set 类似,直接看代码:

    var map = new Map();
    var key1 = {toString : function() { return 2}};
    var key2 = 2;
    map.set(key1, 1);
    map.set(key2, 2);
    
    map.has(key1); // true
    map.has('2'); // false,类型不同
    map.delete(2);
    map.size; // 1
    map.get(key2); // undefined

    迭代

    我们没办法像数组一样用 for 循环来迭代 Set,也没办法像对象一样用 for...in 来迭代 Map。但是可以用 ES6 提供的新方法 for...of 来遍历它们。

    Set 和 Map 有几个方法会返回可迭代对象(Iterator Objects),分别是 entries()、keys() 和 values()。直接遍历 Set/Map,等同于遍历 entries();keys() 和 values() 则分别返回 key 和 value 的集合;对于 Set,key 和 value 是一样的。这些方法和 for...of 现阶段都只有 Firefox 支持,下面的例子需要在 Firefox 下运行:

    var set = new Set();
    set.add('this is a demo.');
    set.add(window);
    set.add(top);
    
    for(let item of set) {
        console.log(item);
    }

    WeakMap

    WeakMap 相对于普通的 Map,也是键值对集合,只不过 WeakMap 的 key 只能是非空对象(non-null object)。WeakMap 对它的 key 仅保持弱引用,也就是说它不阻止垃圾回收器回收它所引用的 key。WeakMap 最大的好处是可以避免内存泄漏。一个仅被 WeakMap 作为 key 而引用的对象,会被垃圾回收器回收掉。

    WeakMap 拥有和 Map 类似的 set(key, value) 、get(key)、has(key)、delete(key) 和 clear() 方法,但没有 size 属性,也没有任何与迭代有关的方法。

    WeakSet?

    ES6 还定义了另外一种集合类型:WeakSet,但目前还没有浏览器实现。顾名思义,它应该是没有 size 属性、不能迭代的 Set;且只能添加非空对象。这里有 V8 引擎实现 WeakSet 的代码,大家可以先看看。

    关键词: ECMAScript6,ES6,set   编辑时间: 2015-07-20 17:34:25

    • 感到高兴

      0

      高兴
    • 感到支持

      0

      支持
    • 感到搞笑

      0

      搞笑
    • 感到不解

      0

      不解
    • 感到谎言

      0

      谎言
    • 感到枪稿

      0

      枪稿
    • 感到震惊

      0

      震惊
    • 感到无奈

      0

      无奈
    • 感到无聊

      0

      无聊
    • 感到反对

      0

      反对
    • 感到愤怒

      0

      愤怒
    0%(0)
    0%(0)
    共有0 条评论 发言请遵守【相关规定

    网友评论

    会员头像
    发 表同步腾讯微博  匿名评论  验证码:  点击更新
    • 暂无评论
    关闭??? align=文章图片 article Pictrue
    • 基于koa2+mysql+vue2.0+Element阳光内容管理系统
    • 代码覆盖率工具 Istanbul 入门教程
    • 全栈工程师的武器——MEAN
    • 9款超炫的 CSS3 复选框(Checkbox)
    • 微信开发在线翻译功能
    • CSS3那些不为人知的高级属性
    • 给easyui的datebox添加清空事件
    • flash写字效果
    • kendoUI系列教程之DropDownList下拉菜单
    • kendoUI系列教程之datetimepicker日期时间选择
    • kendoUI系列教程之datepicker日期选择
    • kendoUI系列教程之combobox下拉列表框
    • kendoUI系列教程之colorpicker
    • kendoUI系列教程之calendar日历表
    • kendoUI系列教程之autocomplete自动补齐
    • kendo ui简介
  • Nigerian expat advocates one 2019-05-16
  • 河北省交通运输厅:平安交通一路同行 2019-05-11
  • 钱江晚报:乱花的治霾资金要追回更需追责 2019-04-28
  • 慈善基金进社区 点对点帮扶居民 2019-04-10
  • 三面悬崖的3197哨所 战士背饮用水要走"天梯" 2019-04-10
  • 习近平《在深入推动长江经济带发展座谈会上的讲话》单行本出版 2019-04-09
  • 女子在自家院子乘凉 被后山滚落千斤巨石砸死 2019-04-07
  • 很深刻。当今城市化基本出于房地资本的繁衍需要与维持粗陋GDP的无奈,越来越显露其反动性。 2019-04-03
  • 故都之秋,惊艳了整个华东文章中国国家地理网 2019-04-03
  • 中国虚拟现实创新创业大赛南昌赛区颁奖仪式举行 2019-03-31
  • 邯郸“廉政诊所”筑起基层首道廉政防线 2019-03-31
  • 蔡英文,赖清德,李登辉,陈水扁..... 2019-03-24
  • 【北京海之沃车型报价】北京海之沃4S店车型价格 2019-03-22
  • 上海电影节第三日:电影市场热议产业新形势 2019-03-22
  • 特朗普雇佣资深律师应对涉俄调查 2019-03-18
  • 新疆时时彩开奖号码结果 pk10在哪里下注 极速快3和值规律 彩票开奖彩票开奖查询 幸运武林投注秘诀 京东彩票官网首页 北京赛车直播 重庆时时彩开奖号码冷热 重庆时时彩高频彩 新疆时时彩开奖结杲 彩宝网3d开机号列表 开大奖了 3d0-9分布图 新时时彩专家计划 新疆时时彩有没有技巧 福彩22选5