• es6 语法


    /---字符串---/
    
    let str="string"
    str.includes("c"))     //判断字符串是否包含“c”,是返回true,否者返回false
    str.startWith("str")   //判断字符串是否以“str”开头,是返回true,否者返回false
    str.endWith("ng")      //判断字符串是否以“ng”结尾
    str.repeat(2)          //字符串复制两次 ,返回“stringstring”
    '1'.padStart(2 ,'0')   //字符串从头开始补全 长度为2 ,以 '0 '补全, 返回 “01”
    ‘1’.padEnd(2 ,'0')   //字符串以尾开始补全 长度为2 ,以‘0’补全,返回‘10’
    String.raw`Hi
    ${1+2}` //阻止正则表达式进行转义
    
    
    /---数字---/
    Number.isInteger(25)           //判断这个是否是一个整数
    Number.isSafeInteger(10)       //判断这个数是不是在一个安全范围
    Number.MAX_SAFE_INTEGER  数字最大的安全范围
    Number.MIN_SAFE_INTEGER  数字最小的安全范围
    //数字取整
    Math.trunc(4.1)//返回‘4’  Math.trunc(4.9)//返回‘4’
    
    //判断是否是正负数
    Math.sign(-5)//返回-1    Math.sign(0)//返回0    Math.sign(5)//返回1    Math.sign("-50")//返回-1    Math,sign("sdfs")//返回NaN 不是一个数字
        
    
    /---map和array的对比---/
    let map=new Map();
    let array=[];        
    //
    map.set('t',1)
    array.push({t:1})
    //
    map.has('t');
    array.find(item=>item.t)
    //
    map.set('t',2)
    array.forEach(item=>item.t?item.t=2:"")
    //
    map.delete('t')
    let index=array.findIndex(item=>item.t)
    array.splice(index,1)
    
    /---set和array的对比---/
    let set=new Set();
    let array=[];
    //
    set.add({t:1})
    array.push({t:1})
    //
    set.has({t:1})
    array.find(item=>item.t)
    //
    set.forEach(item=>item.t?item.t=2:"")
    array.forEach(item=>item.t?item.t=2:"")
    //
    set.forEach(item=>item.t?set.delete(item):'')
    let index=array.findIndex(item=>item.t)
    array.splice(index,1)
    
    /---map,set,object对比---/
    let item={t:1}
    let map=new Map()
    let set=new Set()
    let obj={}
    //
    map.set('t',1)
    set.add(item)
    obj['t']=1
    //
    console.info(
     map.has('t')
     set,has(item)
     't' in obj
    )
    //
    map.set('t',2)
    item.t=2
    obj['t']=2
    //
    map.delete('t')
    set.delete(item)
    delete obj['t']
    
    
    /---Proxy用法---/
    let obj={
      time:'2017-03-11',
      name:'net',
      _r:123
    }
    let monitor =new Proxy(obj,{
      //拦截对象属性的获取
      get(target,key){
         return target[key].replace('2017','2019') //把2017改成2019
      },
      //拦截对象设置属性
      set(target,key,value){
         if(key==='name'){
           return target[key]=value;
         }else{
           return target[key];
         }
      },
      //拦截key in object操作
      has(target,key){
        if(key==="name"){
        return target[key]
        }else{
         return false
        }
      },
      //拦截delete
      deleteProperty(target,key){
        it(key.indexOf('_'){
        delete target[key];
        return true;
        }else{
            return target[key];
        }
      },
      //拦截object.key,object.getOwnPropertySymbols,object.getOwnPropertyNames
      ownKeys(target){
        return Object.keys(target).filter(item=>item!='time')
      }
    
    });
    console.log(monitor.time)         //monitor属性的获取,这个返回2019-03-11
    monitor.time='2018'               //monitor属性的修改,这个没有修改,被拦截了
    monitor.name='finghi'             //monitor属性的修改,设置成功
     
    console.log('name' in monitor ,'time' in monitor)   //返回 true false
    
    delete monitor.time;              //monitor属性的删除,没有成功,被拦截了
    delete monitor._r;                //monitor属性的删除,成功
    
    console.log(Object.keys(monitor));//time被拦截了 返回name _r ,
    
    /---Reflect---/
    //Reflect和上面的proxy用法一样,但不需要new
    {
      let obj={
        time:'2017-03-11',
        name:'net',
        _r:123
      }
    
    console.log(Reflect.get(obj,'time'))               //返回2017-03-11
    Reflect.set(obj,'name','www');                     //设置name属性
    console.log(Reflect.has(obj,'name'))               //返回true
    }
    
    /---Proxy和Reflect的经典应用场景---/
    function validator(targer,validator){
      return Proxy(target,{
        _val=validator,
        set(target,key,value,proxy){
          if(target.hasOwnProperty(key)){
        let va=this._val[key]
        if(!!va(value)){
          return Peflect.set(target,key,value,proxy)
        }else{
          throw Error(`不能设置${key}到${value}`)
        }
          }else{
        throw Error(`${key}不存在`)
          }
        }
      })
    }
    
    
    const personValidators={
      name(val){
        return typeof val==='string'
      }
      age(val){
        return typeof val==='number' && val>18
      }
      mobile(val){
        return typeof val==='number'
      }
    }
    
    class Person{
      constructor(name,age){
         this.name=name;
         this.age=age;
         this.modile=123456789
         return validator(this,personValidators)
      }
    }
    
    const person =new Person('lilei',30)
    console.info(preson);
    person.name="Han mei mei"
    console.info(person);
  • 相关阅读:
    正则 不匹配某个单词
    希赛 系统架构设计师教程 勘误
    QQ 快速登录中获取用户信息
    requests 配置tor代理后提示'Failed to establish a new connection: [Errno -2] Name or service not known'
    xadmin choice filter 多选
    kali linux 热点 无法获取IP
    windows10 输入法添加小鹤双拼
    del: recycle for linux
    安装WSL2
    cmake(转载)
  • 原文地址:https://www.cnblogs.com/finghi/p/12242796.html
Copyright © 2020-2023  润新知