07-ES6知识点总结

1、es6有哪些常用的新特性?

  • let和const
  • 解构赋值
  • 模板字符串
  • 剩余参数
  • 箭头函数
  • 扩展运算符
  • Set和Map
  • Proxy
  • Promise
  • async和await

 

2、var、let 和 const的区别

  • var声明的变量存在变量提升,而let和const不存在,一定要在声明后使用。
  • let和const存在暂时性死区和块级作用域。
  • var允许重复声明,let和const不允许。
  • var和let可以修改变量,const声明一个常量。

 

3、ES6中函数的扩展?

(1)默认参数

  • 为函数的参数设置默认值,即直接写在参数定义的后面。
function log(x, y = 'World') {
  console.log(x, y);
}

(2)length属性

  • 指定了默认值后,length属性将失真。
(function (a, b, c = 5) {}).length // 2
  • rest 参数也不会计入length属性。
(function(...args) {}).length // 0

(3)rest参数

  • 形式为...变量名,用于获取函数的多余参数,该变量将多余的参数序列放入数组中。
function add(...value){}

(4)箭头函数

  • 箭头函数没有自己的this,也不可以当作构造函数。

 

4、ES6中数组的扩展?

(1)扩展运算符

  • 形式为...数组名,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
console.log(...[1, 2, 3])	// 1 2 3
  • 更简单实现数组复制。
const a1 = [1, 2];
const a2 = [...a1];
  • 更简单实现拼接数组,是浅拷贝。
const a1 = ['a', 'b'];
const a2 = ['c'];
[...a1, ...a2 ]	//[ 'a', 'b', 'c' ]

(2)Array.from()

  • 用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象。
Array.from('hello')	// ['h', 'e', 'l', 'l', 'o']
  • 还可以接受第二个参数,作用类似于数组的map方法。
Array.from([1, 2, 3], (x) => x * x)	// [1, 4, 9]

(3)Array.of()

  • 用于将一组值,转换为数组。
Array.of(3, 11, 8) // [3,11,8]

(4)新增的方法

  • find():找到返回被找的元素,找不到返回undefined。
  • findIndex():找到返回被找元素的索引,找不到返回-1。
  • fill():使用给定值,填充一个数组。
  • includes():跟indexOf很像,但是includes能找到NaN。
const arr = [1, 2, NaN]

console.log(arr.indexOf(NaN))  // -1  
console.log(arr.includes(NaN)) // true includes能找到NaN
  • flat()和flatMap()

 

5、ES6中对象的扩展?

(1)属性和方法的简写。

(2)Object.is()

  • 判断两个值是否相等,与(===)的行为基本一致。
+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

(3)Object.assign()

  • 用于对象的合并,将源对象source的所有可枚举属性,复制到目标对象target上。
  • 是浅拷贝,遇到同名属性会进行替换。
const target = { a: 1, b: 1 };
const source1 = { b: 2, c: 2 };

Object.assign(target, source1);

(4)Object.keys()

  • 返回自身的所有可遍历(enumerable)属性的键名的数组。

(5)Object.values()

  • 返回自身的所有可遍历(enumerable)属性的键值的数组。

 

6、Set和Map

(1)Set

  • Set类似于数组Array,但是成员的值都是唯一的,没有重复的值。
// 数组去重
[...new Set(array)]

 

(2)Map

  • Map 类似于对象Object,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值都可以当作键。
  • Map的键值对个数可以通过size属性获取,Object的键值对个数只能手动计算。

 

7、Proxy

  • Proxy 用于创建一个对象的代理,从而实现基本操作的拦截和自定义。
var proxy = new Proxy(target, handler);
//target参数表示所要拦截的目标对象
//handler参数也是一个对象,用来定制拦截行为
  • Object.defineProperty只能监听到对象属性的读写,而Proxy除读写外还可以监听对象中属性的删除,对对象当中方法的调用等。

 

(1)get(target, propKey, receiver):拦截对象属性的读取操作。

(2)set(target, propKey, value, receiver):拦截对象属性的赋值操作。

(3)deleteProperty(target, propKey):拦截delete操作。

 

8、Promise

(1)概述

  • Promise 是异步编程的一种解决方案,可以解决回调函数导致的“回调地狱”问题。
  • Promise 是一个对象,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。
  • Promise 对象的状态一旦改变,就凝固不会再变。

07-ES6知识点总结_第1张图片

(2)用法

  • Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。
const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
  • resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。
  • reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”。
promise.then(function(value) {
  // success
}, function(error) {
  // failure
});
  • then方法分别指定resolved状态和rejected状态的回调函数。

 

(3)Promise.all()

  • Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.all([p1, p2, p3]);
  • 多个 Promise 任务同时执行,如果全部成功,则以数组的方式返回所有 Promise 任务的执行结果。 如果有一个 Promise 任务 rejected,则只返回 rejected 任务的结果。

 

(4)Promise.race()

  • Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.race([p1, p2, p3]);
  • 多个 Promise 任务同时执行,返回最先执行结束的 Promise 任务的结果,不管这个 Promise 结果是成功还是失败。

 

9、Iterator和for of循环

(1)Iterator概述

  • 遍历器是一种接口,为各种不同的数据结构提供统一的遍历访问机制。
  • 一种数据结构只要具有Symbol.iterator属性,就称这种数据结构是“可遍历的”,就可以用for...of循环遍历它的成员。

 

(2)for in和for of的区别?

  • for in:遍历,得到的是对象的键,或者数组、字符串的下标。
  • for of:遍历,得到的是键值对中的值,但是不能用在object上,因为它没有Symbol.iterator属性。可以用在Array、Map、Set、String上。

 

10、async和await

(1)概述

  • async类似于 Generator 和Promise的语法糖,在函数前使用关键字 async 来表示,在函数内部使用await 表明当前函数是异步函数。
const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
};
asyncReadFile().then();

(2)特点

  • async函数自带执行器,不像Generator需要调用next方法 。
  • await命令后面,可以是 Promise 对象和原始类型的值。
  • async函数的返回值是 Promise 对象,用then方法指定下一步的操作。

 

11、解决异步的方案?

(1)回调函数

  • 缺点:回调地狱,无返回值

(2)promise

  • 优点:解决回调地狱,方法好用
  • 缺点:纵向链式写大量回调,同样冗余。

(3)async和await

  • 优点:将异步代码以同步的形式编写,处理异步编程的最终方案。
  • 缺点:如果几个await间没有依赖性,会有性能问题。

 

12、浏览器加载

  • 浏览器通过

你可能感兴趣的:(前端知识点,javascript,前端)