es6方法

## 1.let/const/var区别
  - let/const 不能重复声明,var可以
  - let/var 声明的变量值可以被修改,const不可以
  - var 存在变量提升,let/const不存在变量提升
  - 暂时性死区:let/const 声明的变量在声明之前不能使用,var可以
  - let/const声明的变量块级作用域内有效
## 2.对象中,如果value值是一个变量,变量名和对象中的key字符串一样,那么可以省略value
  ```
  var name = '斌'
  var obj = {
    name
  }
  var obj ={
    name: '斌'
  }
  ```
## 3.解构赋值
  - 对象解构赋值: key-value键值对一一对应,已有的属性值赋给对应变量
  ```
  let { foo, bar, baz:baz } = { foo: 'aaa', bar: 'bbb', aaa:'ccc' };
  foo // "aaa"
  bar // "bbb"
  baz' // undefined
  ```
  - 数组解构赋值: 数组元素与变量一一对应,已有的元素赋给对应变量
    ```
    let [foo,, baz] = ['aaa', 'bbb', 'ccc'];
    ```
  - 混合解构赋值
    ```
      let [foo, { bar }] = [{ bar: 'bbb' }, 'aaa'];
      foo // { bar: "bbb" }
      bar //undefined

      let [foo, { bar }] = [{ bar: 'bbb' }, {bar: 'ccc'}];
      foo // { bar: "bbb" }
      bar //ccc
    ```
  - 函数参数解构赋值: 函数参数与变量一一对应,已有的参数赋给对应变量
    ```
      const fun = function({a,b}) {
        console.log(a,b);
      }

      fun({a:1,b:2})
    ```
## 4.箭头函数
  - 普通函数
    ```
      const fun = function(a,b) {
      }
    ```
  - 箭头函数
    ```
      const fun = (a,b) => {
        var obj = {
          name: 'obj',
          getName: () => {
            console.log(this)
            console.log(this.name)
          }
        }
      }
    ```
  -区别:
    - 1.this指向问题:
      - 普通函数:谁调用的这个函数,函数内部的this指向的就是谁
      - 箭头函数:箭头函数没有自己的this,箭头函数的this是外层函数的this
    - 2.箭头函数不能被new,也就是说箭头函数不能作为构造函数
      - 箭头函数没有prototype属性,不能被new
      - 箭头函数没有自己的this,无法修改this指向
    - 3.箭头函数不能使用arguments来获取所有的参数
## 5.修改this的方法
    - 1.call、apply、bind
      - call、apply参数不同:
        - 第一个参数为this指向,后面的参数call 是调用的方法的参数直接排列,apply 是调用的方法的参数放在一个数组中
      - bind区别:
        - 第一个参数为this指向,后面的参数是调用的方法的参数直接往后排,但是不直接调用,需要调用的时候再调用
## 6.parseInt
    - 第一个参数:要解析的字符串
    - 第二个参数:进制
    - 经典面试题:[0,1,2].map(parseInt) //[0, NaN, NaN]
## 7.模板字符串
```
var name = '斌'
var getName = function () {
    return this.name
}

console.log(`我的名字${name}是${getName()}`)
```
## 8.扩展运算符  ...
```
//数组
var arr = [0,1,2]

var result = [1,2,...arr]
console.log(result)

//对象
var list = [{
  name: '张学友',
  age: 20
},{
  name: '刘德华',
  age: 28
},{
  name: '黎明',
  age: 18
}]

const result = list.map(item => {
  return {
    ...item,
    dayu20: item.age > 20
  }
})
console.log(result)
```
## 9.原型/原型链
  - 所有的对象出null外,每一个都有一个__proto__属性,指向他的构造函数的原型对象,也就是prototype,当我在对象里面找某一个属性或者方法的时候, 现在自己内部找如果没有的话,我会找自己的__proto__属性指向的原型对象,如果还没有的话,我会找原型对象的__proto__属性指向的原型对象,直到找到或者找到了Object.prototype,因为Object.prototype.__proto__属性是null,所以找到这里停止
## 10.函数
  - 函数参数默认值,直接给形参赋值
  - 剩余参数...rest: 如何获取类似普通函数的arguments?es6提供了展开剩余参数...rest语法获取类似argumets的参数
## 11.数组
  - Array.from 将类数组对象转换为数组,Set
  - Array.of
  - copyWithin: 会修改原数组,第一个参数从哪里开始粘贴,第二和参数从哪里开始复制,第三个参数复制结束的索引
  - find/findIndex/findLast/findLastIndex
  - fill:会修改原数组,第一个参数填充的值,第二个参数开始索引,第三个参数结束索引,不包含结束的索引 
  - 遍历数组:
    - find/findIndex/findLast/findLastIndex
    - entries():返回索引和值组成的数组
    - keys():返回索引组成的数组
    - values():返回值组成的数组
  - includes:包含则返回true,不包含则返回false
  - flat:拍平数组,把多维嵌套的数组排成一维数组,参数为拍平的层数,默认为1,如果未知层数可以传入Infinity无穷大(尹飞内忒)
  - sort:
    - 当数组个数大于某个阈值的时候是快速排序,小于某个阈值的话是冒泡排序
    - [{name: '张三', age: 18}, {name: '李四', age: 20}, {name: '王五', age: 22}]
  - map和forEach的区别
    - map:新生成一个数组,每一个元素就是map参数函数的返回值
    - forEach:没有返回值
## 12:对象
  - Object.keys():键(key)的集合
  - Object.values():值(values)的集合
  - Object.entries():键值对(key,value)的集合,Iterator对象
  - Object.assign():合并对象,浅拷贝
  - 深拷贝:JSON.parse(JSON.stringify())
  
## 13:Symbol
  - 简单数据类型:表示独一无二的值
## 14:Set
  - Set:集合,不允许重复的值
    - 可以用来快速去重
    ```
    let arr = [1,2,3,3,21,56,1,234,6,1234,1,234,4,5,6,1,23,4]
    let set = new Set(arr)
    [...set]
    Array.from(set)
    ```
  - WeakSet:弱集合,只能存放对象,垃圾回收机制不考虑WeakSet对数据的引用
## 15: Proxy
  - 代理对象:拦截对象操作,访问代理对象,实现数据访问控制
    ```
    let ProxyObj = new Proxy({},{
      get() {}
      get(){}
    })
    ```
## 16:Iterator:遍历器对象
  - 是一个接口,只要一个数据实现了Iterator接口,就可以使用for...of...遍历
  - 实现接口时必须在[Symbol.iterator]属性上面实现Iterator接口方法
  - 原生实现了Iterator接口的对象有:Array,Map,Set,String,TypedArray,Arguments对象,nodeList
## 17:Generator:生成器
  - Generator函数是ES6新增的语法,用来生成迭代器
  - Generator函数可以返回一个迭代器,可以调用next方法迭代数据
## 18.Promise
  - Promise对象是一个构造函数,用来生成Promise实例
  - 传统的回调方法处理异步存在回调地狱问题,Promise解决了这个问题
  - var p1 = new Promise(function() {}),传到Promise中的方法会立即执行,方法中promise传入了resolve和reject方法,什么时候resolve()执行了,p1.then(res)方法就会执行,then方法里面的res 就是resolve()方法传入的参数,什么时候reject()执行了,p1.catch()方法就会执行,catch方法里面的err 就是reject()方法传入的参数
  - Promise.then: then方法返回一个新的Promise对象,then方法里面的res就是resolve()方法传入的参数
  - Promise.catch: catch方法返回一个新的Promise对象,catch方法里面的err就是reject()方法传入的参数
  - Promise.all: 传到all方法里面的数组里面所有的promise实例都resolve了,all方法的.then方法才会执行,只要有一个失败(reject)了,Promise.all方法就会失败(reject),执行.catch
  - Promise.any: 只要参数数组中的promise有一个成功(resolve),就返回这个成功的promise,所有的都失败了的话,Promise.any才会修改成失败的状态,执行.catch
  - Promise.race: 只要有一个promise有结果了,Promise.reace就会有结果,结果就是第一个Promise实例的结果
    - 只要有一个promise实例成功(resolve)了,Promise.race方法就会成功(resolve),执行.then
    - 只要有一个promise实例失败(reject)了,Promise.race方法就会失败(reject),执行.catch
  - Promise.finally: 不管promise是成功还是失败,都会执行finally方法
## 19.await/async
  - async:es6是Generator的语法糖,es7是Promise的语法糖
  - await必须在async修饰的方法里面才能使用
## 20.class
  - 就是构造方法的另一种写法
  - 继承比较方便:extends
## 21.module
  - export:导出
    - export default:默认导出的内容,一个模块只能有一个默认导出的内容,导入的时候,默认导出的内容不需要加{}
    - export a:非默认导出的内容,导入的时候需要加{}
  - import:导入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值