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
  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值