常用的es6

346 阅读4分钟
1.比较版本:用es6中的数组方法some
function compareVersion() {
  some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
  some() 方法会依次执行数组的每个元素:
    如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
    如果没有满足条件的元素,则返回false。
    注意: some() 不会对空数组进行检测。
    注意: some() 不会改变原始数组。
  let curVersion = getSystem().SDKVersion.split('.').map( (i) => {
    console.log(i);//'1' '9' '0'
  })
  console.log("SDKVersion", getSystem().SDKVersion);//SDKVersion 1.9.0
  console.log("SDKVersion", getSystem().SDKVersion.split('.'));//['1','9','0']
  console.log(curVersion);//[1,9,0]
  let version = VERSION.split('.').map(i => Number(i))
  return !curVersion.some((item, i) => item < version[i])
}
2.去拿data中的数据:包含app.data,res.data  
   let { missKeyInfo, sid } = app.globalData.userInfo;
3.assign()在对象合并和赋值中的应用
object.assign(app.globalData.userInfo,this.data.userInfo);
4.Object.keys()在赋值中的应用
for(var attr of Object.keys(that.data.userInfo)){
   (attr!='account')&&(that.data.userInfo[attr]=app.globalData.userInfo[attr])
}
5.es6的find和findIndex方法 
数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
如下
[1, 4, -5, 10].find((n) => n < 0)  
// -5  
[1, 5, 10, 15].find(function(value, index, arr) {  
return value > 9;  
}) // 10  
上面代码中,find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。
数组实例的findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) {  
return value > 9;  
}) // 2  
6.if (Version <= '1.6') return Promise.reject('版本过低,不支持此API')
  if (!isAndroid) return Promise.reject('除安卓外均不支持此方法')
7.const modal = weex.requireModule('modal')
weex.registerModule('ModalModule', {
  loading (params) {
    if (params.show) console.log('%c[ModalModule] loading open', 'color: green;')
    else console.log('%c[ModalModule] loading close', 'color: green;')
  },
  ...modal
})
我们对于...modal来进行解析
创建一个对象 obj
8.try catch的使用方法
  aliPay () {
      try {
        weex.requireModule('PayModule').invokePaySdk({
          type: 'alipay',
          orderInfo: '123EE456WDE789',
          sWxAppId: 'null'
        }, resp => {
          if (typeof resp === 'string') {
            this.info = 'string: ' + resp
          } else {
            this.info = JSON.stringify(resp)
          }
        })
      } catch (err) {
        this.info = 'Error: ' + err
      }
    }
  }
9.使用字符串:`非常抱歉,你${payMethod}支付失败,建议你尝试其他支付方式`
10.handleCelsiusChange(temperature) { this.setState({scale: 'c', temperature})}   注意temperature,当变量和属性重名时,怎么给对象赋值
11.reduce()方法  
reduce()方法接收一个函数callbackfn作为累加器(accumulator),
  数组中的每个值(从左到右)开始合并,最终为一个值。
我:
而initialValue作为第一次调用 
  callbackfn函数的第一个参数
我:
function callbackfn(preValue,curValue,index,array){}
  preValue: 上一次调用回调返回的值,或者是提供的初始值(initialValue) 
  curValue: 数组中当前被处理的数组元素
  index: 当前数组项在数组中的索引值 
array: 调用 reduce()方法的数组
  let paramStr = Object.keys(options.params).reduce((acc, key) => `${acc}${key}=${options.params[key]}&`, '?') 
  reduce在拼接路径的时候的用法:'?'作为函数的第二个参数,那么就是以他开头还是累加   acc 是上次的拼接的结果   key是这次的key   ${options.params[key]}是这次的值  注意后面的&:每次凭借都是以&结尾的
12.以后写函数的时候先考虑传的参数是什么类型,然后给写默认值
????function?http?(OPTIONS?=?{})?
13.class讲解http://www.cnblogs.com/humin/p/4313807.html
14.let users = [...this.state.users, { avatar: '', content: val, username: 'zfpx' }]; 给数组添加元素,展开旧的,加入新的
15.res = await axios.get('/user.json')   返回的是请求到的数据
    axios.get('/user.json') 返回的是一个promise
    await 后面如果是一个promise的话,返回的就是promise返回的结果,这里就是数据
    这个其实和axios.get('/user.json').then(res => {.........})是一样的,只不过这里是直接拿到了res,可以在下面写应用res了
    
    
    
    
16.数组扁平化
/**
 * 截取不带参数的路由
 * @param {String} str 路由路径
 * @return {String} 去掉参数后的路由路径
 */
const replaceQuery = str => str.replace(/\/:.*/, '');
/**
 * 扁平化数组
 * 交给导航栏使用
 * @param {Array} options
 * @return {Array} menu = [
 *  {
 *    label: '',
 *    path: '',
 *    icon: '',
 *    children: [
 *      {
 *        label: '',
 *        path: ''
 *      }
 *    ]
 *  }
 * ]
 */
const createMenus = options =>
  options.map(({ label, path, icon, children }) => {
    const option = { label, path: replaceQuery(path), icon };
    // 地址管理不带二级菜单
    if (Array.isArray(children) && !['地址管理', '账户中心'].includes(label)) {
      return {
        ...option,
        children: children.map(({ label, path }) => {
          return { label, path: replaceQuery(path) };
        }),
      };
    }
    return option;
  });
/**
 * 扁平化数组
 * 交给路由使用
 * @param {Array} options
 */
const createRoutes = options =>
  options
    .reduce((pre, item) => {
      const { children, label, ...others } = item;
      if (others.component !== null) {
        pre.push(others);
      }
      if (Array.isArray(children)) {
        return [...pre, ...createRoutes(children)];
      }
      return pre;
    }, [])
    .filter(item => item.path);

/**
 * 扁平化数组
 * 交给面包屑使用
 * @param {Array} options
 */
const createBreadcrumb = options =>
  options.map(({ label, path, children }) => {
    if (Array.isArray(children)) {
      return {
        label,
        path: replaceQuery(path),
        children: createBreadcrumb(children),
      };
    } else {
      return { label, path: replaceQuery(path) };
    }
  });

export { createRoutes, createMenus, createBreadcrumb };

17.对于配置常量对象 ,不允许修改且有默认值的
    const carTypeDict = {
      [0]: 'kg_xxmb_1534822754105.png',
      [1]: 'kg_jb_1534822754199.png',
      [2]: 'kg_xxxh_1534822754118.png',
      [4]: 'kg_dxxh_1534822754177.png',
      [5]: 'kg_ywk_1534822754120.png',
      [10]: 'kg_xxpb_1534822754105.png',
      [11]: 'kg_zxpb_1534822754129.png',
      [12]: 'kg_dxpb_1534822754148.png',
    };
    const handler = {
      get(target, name) {
        // use 'jb.png' instead of no picture of carcode
        return name in target ? target[name] : target[1];
      },
      set(value) {
      // can't change element of carType
        return false;
      },
    };
    const carType = new Proxy(carTypeDict, handler);
18.数组解构
        let [key, val] = item.split('=');
        obj[key] = val;
11.对象解构
    let env = process.env.BETA_ENV ? 'beta' : process.env.NODE_ENV;
    let { [env]: { userName, userEmail } } = gitUserInfo;
    

这里去看看js和es6