《献给你,我深爱的ECMAScript》之集合篇

发布于 小春

本文主要说说ECMAScript6 集合中新引入的Map和Set

以往我们用的比较多的就是Array或者Object来存取一些值

那什么是Map?

先看一段代码示例:

        var myMap = new Map();

        //set 
        myMap.set("name","zhangyaochun");
        myMap.set("job","fe");
        myMap.set("for","w3cplus");

        myMap.set(NaN,"我能做NaN的对应值,真不容易~");
        myMap.set(NaN,"我是来看看我能不能干掉楼上的~");
        
        //+0 与 -0
        myMap.set(+0,"我是+0");
        myMap.set(-0,"我是-0");

        //size
        myMap.size;  //6,为啥是6呢,后面有解释哦

        //get - 不存在返回undefined
        myMap.get("name"); //zhangyaochun
        myMap.get("for");  //w3cplus

        //has - 返回布尔值
        myMap.has("name"); //true
        myMap.has("for");  //true
 
        //delete - 删除对应指定的key
        //参数为空的话 什么都不做
        myMap.delete("name");
        myMap.has("name"); //false

        //clear - 清空Map对象
        myMap.clear();

 

很多同学从上面的代码中也大概知道Map对象提供的一些方法和属性了.

很直观的api设计,可以很方便地设置、获取和删除Map对象的键值,而且可以判定是否还有某个key以及整个Map对象对应的键值对个数。

 

来看看注释呗~

1. set的第一个参数key对应的数据类型不再那么单一(只能String),可以NaN、Object甚至Function(但是应用场景有待检查,我个人基本不用它做key)

2. Firefox19开始将以前的size()方法变成了size属性

3. Firefox19也同时新增了clear()方法来清空所有的键值,更人性化的api设计

4. key为+0 和 -0是不一样的键(尽管:+0 === -0 返回的是true)

5. 多次以NaN为键,只有第一次是有效的

 

那什么又是Set?

同样先来看一段代码示例:

        var mySet = new Set();

        //add - 增加一个指定的key
        mySet.add(1);
        mySet.add(2);
        mySet.add(3);

        //size属性 - Set对象的元素个数
        mySet.size;  //3

        //has - 判断是否含有指定的key
        mySet.has(1);  //true

        //delete - 删除指定的key
        mySet.delete(1);
        mySet.has(1);  //false
        mySet.size;    //2

        //clear - 清空Set对象
        mySet.clear();

        //有这个牛逼的功能
        var set = new Set([1,2,3,4,4,4,4,4,4]);
        set.size;  //是几呢?自己试试呗

同样我们从代码示例中可直观地看到提供了设置、获取、清空、删除等方法。 而且Set对象存储的值一定是"唯一"的哦~

注释看过来~

1. Firefox19开始将原来的size()方法改为size属性

2. Firefox19开始支持clear()方法

3. +0 和 -0 也同样是不同的key值

4. 也不能存入多个NaN

资料参考阅读:

 

如需转载,烦请注明出处:https://www.fedev.cn/js/ecmascript-lesson-3.html

Nike Air Max 90 EZ Running Men Shoes Royal Blue Orange