ES6入门(3)

ES6基本用法(3)

今天学习了ES6中的Set、WeakSet、Proxy,Reflect
Set听名称就和Java中的HashSet一样,以前在JS中是去除重复值,在Java中也是去除重复值,那么下面我们就来看看。

{
    let list = new Set();
    list.add(1);
    list.add(2);
    list.add(1);
    console.log('list',list);//1,2
}

上面是一种先创建Set在进行赋值的操作,可以看到添加了3个元素:1,2,1 那么里面有2个1那么就会把重复的1给去掉

下面是第二种赋值方式

{
    let arr = [1,2,1];
    let list = new Set(arr);
    console.log('list',list);//1,2
}

上面是另一种赋值方式,已构造器的形式进行赋值

那么来说一下Set中的方法,除了add增加元素,那么还有has、delete、clear

{
    let arr = ['juqianwei','zhengshuang','zhoujielun','liyifeng'];
    let list = new Set(arr);
    console.log('has',list.has('juqianwei'));//true
    console.log('delete',list.delete('liyifeng'),list);//{"juqianwei", "zhengshuang", "zhoujielun"}
    console.log('clear',list.clear(),list);//{}
}

has是判断集合里面有没有这个值的存在,如果有返回true,没有就返回false,delete是删除元素,如果元素并且存在那么就删除返回true,如果不存在那么删除失败返回false,clear是清除集合中的所有元素 清除完后返回一个空集合{}

下面来讲一下Set集合中的遍历

{
   let arr = ['juqianwei','zhengshuang','zhoujielun','liyifeng'];
   let list = new Set(arr);
    
   for(let key of list.keys()){
       console.log('keys',key);//keys juqianwei keys zhengshuang keys zhoujielun keys liyifeng
   }

   for(let value of list.values()){
       console.log('value',value);//keys juqianwei keys zhengshuang keys zhoujielun keys liyifeng
   }

   for(let [key,value] of list.entries()){
       console.log('key-value',key,value);//keys juqianwei juqianwei keys zhengshuang zhengshuang keys zhoujielun  zhoujielun keys liyifeng liyifeng
   }
}

上面的遍历方式来看key,value都是集合元素中的值。我们试着将对象添加到set进行遍历

{
    let obj = {
        username: 'zhangsan'
    };

    let list = new Set();
    list.add(obj);

    for(let [key,value] of list.entries()){
        console.log('key--value',key,value);//key--value {username: "zhangsan"} {username: "zhangsan"}
    }
}

key和value获取到的还是一样的

WeakSet用的不是特别多,WeakSet的添加的元素只能是对象 方法和Set是一样的

{   
    let obj = {a: 1,b: 2};
    let weakList = new WeakSet();
    weakList.add(obj);
    console.log(weakList);
}

下面来讲一下Proxy和Reflect,看单词的意思代理和反射

{
    let obj = {
        time: '2019-04-30',
        name: 'apple',
        author: 'Jobs'
    };

    //上面定义了一个源数据
    let monitor = new Proxy(obj,{
        //拦截对象属性的读取
       
        // 拦截对象设置属性
        set(target,key,value){
            if(key === 'name'){
                return target[key] = value;
            }else{
                return target[key];
            }
        },
        get(target,key){
            return target[key];
        },
        //拦截key in object
        has(target,key){
            if(key === 'name'){
                return target[key];
            }else{
                return false;
            }
        },
        //拦截 delete
        deleteProperty(target,key){
            if(key === 'name'){
                delete target[key];
                return true;
            }else{
                return target[key];
            }
        },
        //拦截Object.keys,Object.getOwnPropertySymbols,Object.getPropertyNames
        ownKeys(target){
            return Object.keys(target).filter(item => item !='time');
        }
    });

    monitor.name = '华为公司';
    console.log('get',monitor.time);//get 2019-04-30
    console.log('set',monitor);//{time: "2019-04-30", name: "华为公司", author: "Jobs"}
    console.log('has','time' in monitor);//false

    // delete monitor.name;
    // console.log('delete',monitor);

    console.log('ownKeys',Object.keys(monitor));//["name", "author"]
}

Proxy实现了对源数据进行了代理,操作不会影响源数据,对数据进行了间接的保护,Proxy经常用到的几个方法、get、set、has、deleteProperty、ownKeys
get()设置获取拦截,set()设置修改拦截,deleteProperty()设置删除拦截,ownKeys()获取代理对象的所有属性键时触发该操作。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值