1.ES6新增了哪些扩展
- 块级作用域:引入了let和const关键字,可以在块级作用域内声明变量,替代了var的函数作用域。
- 箭头函数:使用箭头函数可以简化普通函数的写法。
- 解构赋值:可以从数组或对象中结构出变量,方便的赋值给其他变量。
- 默认参数:函数参数可以设置默认值,简化了参数的处理和调用。
- 模板字符串:使用反引号` `可以创建多行字符串,也可以插入变量或表达式。
- 扩展运算符:使用‘...’将数组或对象展开,可以创建新的数组或对象。
- 类与继承:引入了class关键字,可以更方便地定义类和继承。
- Promise:引入了Promise对象用于处理异步操作,避免了回调地狱。
- 模块化:引入了import和export关键字,支持模块化开发。
- 增强对象的字面量:可以在对象字面量中使用变量和函数名简写,以及定义方法和计算属性。
- for...of循环:用于遍历可迭代对象(如数组、字符串、Set、Map等)的新循环语法。
- Symbol:引入了Symbol数据类型,用于创建唯一的标识符。
- Map和Set:引入了Map和Set数据结构,分别用于存储键值对和唯一的值集合。
2.let,const,var的区别
- 块级作用域:let和const具有块级作用域,var不存在块级作用域。
- 变量提升:var存在变量提升,let和const不存在变量提升,var在声明前使用会报undefined,let和const只能在声明之后使用,否则会报错。
- 重复声明:var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的变量。let和const不允许重复声明变量。
- 暂时性死区:在使用let、const命令声明变量之前,该变量都是不可用的。称为暂时性死区。使用var声明的变量不存在暂时性死区。
3.箭头函数和普通函数的区别
- 箭头函数比普通函数更加简洁。
- 箭头函数没有自己的this指针,它只会在自己的上一层作用域中继承this。
- call(),bind(),apply()不能改变箭头函数的this指向。
- 箭头函数因为没有自己的this指针,所以不能作为构造函数使用。
- 箭头函数没有自己的arguments,也没有自己的protoype。
4.对Promise的理解
- 异步操作:Promise 用于处理异步操作,如网络请求、文件读取等。它可以将异步操作封装成一个 Promise 对象,在异步操作完成后,通过`then` 方法获取结果或处理错误。
- 状态:Promise 有三种状态:pending(进行中)、fulfilled(已完成)和 rejected(已失败)。在进行中时可以转为已完成或已失败状态,一旦转为其中一种状态,就不可再改变。
- then 方法:Promise 的 then 方法用于注册回调函数,其中包含两个回调参数,分别用于处理异步操作成功和失败的情况。成功时调用第一个回调函数,传递异步操作的结果;失败时调用第二个回调函数,传递错误信息。
- catch 方法:Promise 的 catch 方法用于捕捉异步操作的错误,相当于调用 then 方法的第二个回调函数,维护错误处理链。
- 链式调用:Promise 的 then 方法和 catch 方法可以链式调用,即一个 then 方法的返回值仍是一个 Promise 对象,可以继续调用 then 方法或 catch 方法。这种链式调用可以将多个异步操作串联起来,提高异步代码的可读性。
- 解决异步地狱:Promise 可以解决回调地狱的问题,即多个异步操作嵌套时,代码会变得复杂和难以维护。通过 Promise,可以将异步操作按顺序串联起来,提高代码的可读性和维护性。
- Promise.all 方法:Promise.all 方法接收一个 Promise 数组,并返回一个新的 Promise,该 Promise 在数组中的所有 Promise 都已完成后才会被标记为完成。可以用于同时处理多个并行的异步操作。