zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/finghi/p/12242796.html
Copyright © 2011-2022 走看看