1、es5和es6的区别,说一下你所知道的es6
ECMAScript5,即ES5,是ECMAScript的第五次修订,于2009年完成标准化
ECMAScript6,即ES6,是ECMAScript的第六次修订,于2015年开发完成,也称ES2015
ES6是继ES5之后的一次改进,相对于ES5更加简洁,提高了开发效率
ES6中新增的一些特性
-
let声明变量和const声明变量,两个都有块级作用域(var没有块级作用域) ES5中是没有块级作用域的,并且var有变量提升,在let中,使用的变量一定要进行声明
-
箭头函数 ES6中的函数定义不在使用关键字function(),而是利用了()=>来进行定义
-
模板字符串==>(${}) 模板字符串是增强版的字符串,用反引号(`)标识,可以当作普通字符串使用,也可以用来定义多行字符串
-
解构赋值 ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值
-
for of 循环 for...of循环可以遍历数组、Set和Map解构,某些类似数组的对象、对象,以及字符串
-
import/export导入导出 ES6标准中,Js原生支持模块(module).将JS代码分割成不同功能的小块进行模块化,将不同功能的代码分别写在不同文件中,各模块只需导出公共接口部分,然后通过(模块的导入)的方式可以在其他地方使用
-
Set数据结构 Set数据结构,类似数组。所有的数据都是唯一的,没有重复的值,它本身是一个构造函数
-
...ary(...展开符) 可以将数据或对象里面的值展开;还可以将多个值收集为一个变量
-
class类的继承 ES6中不再像ES5一样使用原型链实现继承,而是引入Class这个概念
-
async、await 使用async/await,搭配Promise,可以通过编写形似同步的代码来处理异步流程,提高代码的简洁性和可读性
async用于申明一个function是异步的,而await用于等待一个异步方法执行完毕
-
promise Primise是异步编程的一种解决方案,比传统的解决方案(回调函数和是事件)更合理,更强大
-
Symbol Symbol是一种基本类型。Symbol通过调用symbol函数产生,它接收一个可选的名字参数,该函数返回的symbol是唯一的
-
Proxy代理 使用代理(Proxy)监听对象的操作,然后可以做一些相应事情
2、var let const 之间的区别
- var声明变量可以重复声明,而let不可以重复声明
- var是不受限于块级的(没有块级作用域),而let和const是有块级作用域的
- var会与window相映射(会挂一个属性),而let不会
- var可以在声明的上面访问变量,而let有存暂死区,在声名的上面访问会出错
- const声明之后必须赋值,否则会报错
- conts定义不可变的量,改变了就会报错
- const和let一样不会与window相映射,支持块级作用域,在声明的上面访问变量会报错
3、es6实现代码数组去重的方式
- ...new Set() 一行代码就可以数组去重
4、使用箭头函数应该注意什么
- 箭头函数是匿名函数,不能作为构造函数,不能用new
- 用了箭头函数,this就不是指向window,而是父级(指向是可变的)
- 箭头函数没有原型属性
- 不可以使用arguments对象,该对象在函数体内不存在
5、ES6的模板字符串有哪些新特性?并实现一个类模板字符串的功能
- 基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定
- 在ES5中通过反斜杠()来做多行字符串或者字符串一行行拼接.
- ES6中用反引号(`)就可以解决
let name = '小明';
let age = 10;
let str = '你好,${name} 已经 ${age}岁了'
str = str.replace(/${([^}]*)}/g,function(){
return eval(arguments[1]);
})
console.log(str);//你好,小明 已经 10岁了
6、介绍下Set和Map的区别?
- 应用场景不同:Set用于数据重组,Map用于数据存储
- Set中成员不能重复,只有键值没有键名,类似数组,可以遍历,方法有add,delete,has
- Map本质上是键值对的集合,类似集合,可以遍历,可以跟各种数据格式转化
7、Promise是什么?有几种状态,什么时候会进入catch?
promise是异步编程的一种解决方案,用来解决异步操作问题
promise有三个状态:pedding(进行中),fulfilled(成功),rejected(失败)
promise有两个过程:pedding=>fulfilled、pedding=>rejected
当pedding为rejected时,会进入catch
8、Promise构造函数是同步执行还是异步执行
promise构造函数是同步执行的,then方法是异步执行的
9、Promise中reject和catch处理上有什么区别
- reject是用来抛出异常的,catch是用来处理异常
- reject是Promise的方法,而catch是Promise实例的方法
- reject后的东西,一定会进入到then中的第二个回调,如果then中没有第二个回调,则进入catch
- 网络异常(比如断网),会直接进行catch而不会进入then的第二个回调
10、如何使用Set数组去重
let arr = [12,43,23,43,68,12];
let item = [...new Set(arr)];
console.log(item);//[12, 43, 23, 68]
11、将下面for循环改成for..of的形式
let arr = [11,22,33,44,55];
let sum = 0;
for(let i=0;i<arr.length;i++){
sum += arr[i];
}
答案如下:
let arr = [11,22,33,44,55];
let sum = 0;
for(value of arr){
sum += value;
}
12、讲一下forEach、for in、for of三者的区别
- forEach更多的是用来遍历数组
- for in一般是用来遍历对象或json
- for of数组、对象都可以遍历,遍历对象要通过Object.keys()
- for in循环出来的是key,for of循环出来的是value
13、说一下es6的导入和导出
- 使用export default时,对应的import语句不需要使用大括号
- 不适用export default时,对象的import 语句需要使用大括号
14、axios的特点有那些?axios拦截器
axios是一个基于promise的http库,支持promise所有的api
它可以拦截请求和响应
它可以转换请求数据和响应数据
安全性更好
常用方法有:axios.get axios.delete axios.post axios.put
15、axios和ajax的区别
ajax
$.ajax({
url: '接口地址',
type: 'get', //或者post 请求类型
dataType: 'json',
data: { // 要发送的请求参数
'username' : 'hermit',
'password' : 'a123'
},
success : function (response) {
console.log(response); // 请求返回的数据
}
})
axios
axios({
url: '接口地址',
method: 'get', //或者 post 请求类型
responseType: 'json', //默认格式,如果就是 json 格式可以不写
data: {
'username' : 'hermit',
'password' : 'a123'
}
}).then( function(response){ // 请求正确返回的数据
console.log(response);
console.log(response.data);
}).catch( function(error) { // 请求错误返回的数据
console.log(error);n
})
两者其实并没有太大的区别,在写法上大致相同 其实axios就是通过promise实现对ajax技术的一种封装