3.10日日前端面试题

114 阅读3分钟

一、ES6的数组方法有哪些?

  1. map() - 用于创建一个新数组,该数组的元素是原始数组的每个元素调用函数的结果。
  2. filter() - 用于创建一个新数组,其中包含所有通过测试的元素。
  3. reduce() - 用于通过应用函数累加器来将数组的所有元素减少为单个值。
  4. find() - 用于返回数组中满足条件的第一个元素。
  5. findIndex() - 用于返回数组中满足条件的第一个元素的索引。
  6. some() - 用于检查数组中是否有元素满足条件。
  7. every() - 用于检查数组中的所有元素是否满足条件。
  8. includes() - 用于检查数组中是否包含特定元素。
  9. flat() - 用于将嵌套的数组展平成一个新数组。
  10. flatMap() - 用于在一个步骤中映射和展平数组。

二、map和foreach的区别

map()forEach()都是JavaScript中常用的数组方法,但它们的作用略有不同。

  1. map():创建一个新数组,其中的每个元素都是原始数组元素应用所提供函数的结果。也就是说,map()方法会对原数组中的每个元素都执行相同的操作,然后返回一个新的数组,而原始数组不会被改变。
  2. forEach():对数组中的每个元素执行给定的函数。与map()方法不同,forEach()不会返回新的数组,而是对原数组进行迭代并执行给定的函数。在forEach()中可以对原数组进行修改。

因此,如果你需要对数组进行映射操作,可以使用map()方法,如果你只需要对数组中的每个元素执行一个操作,可以使用forEach()方法。如果你需要同时对原始数组进行修改并返回新数组,则应该使用map()方法。

三、一般项目中的axios是怎么封装的,用到了axios的哪些方法?

一般来说,封装axios包括以下步骤:

  1. 创建axios实例:使用axios.create()方法创建一个axios实例,并设置通用的配置参数,例如基本的URL、请求头等等。
  2. 请求拦截器:在axios实例中使用interceptors.request.use()方法创建一个请求拦截器,可以在请求发送之前进行一些操作,例如添加公共请求头、添加token等等。
  3. 响应拦截器:在axios实例中使用interceptors.response.use()方法创建一个响应拦截器,可以在接收到响应之后进行一些操作,例如统一处理错误信息、进行数据处理等等。
  4. 封装请求方法:根据项目需要封装相应的请求方法,例如GET、POST、PUT、DELETE等等,并在方法中调用axios实例中的对应方法。
  5. 统一处理错误:在封装请求方法的过程中,可以通过try...catch语句来捕获请求错误,并统一处理错误信息。

常用到的axios方法包括:

  1. axios.get():用于发送GET请求。
  2. axios.post():用于发送POST请求。
  3. axios.put():用于发送PUT请求。
  4. axios.delete():用于发送DELETE请求。
  5. axios.interceptors.request.use():用于创建请求拦截器。
  6. axios.interceptors.response.use():用于创建响应拦截器。
  7. axios.create():用于创建axios实例。
  8. axios.defaults:用于设置默认的配置参数,例如基本的URL、请求头等等。

通过以上的封装,可以让开发人员更加方便地使用axios,并且可以避免重复的代码,提高代码复用性。

以下是代码示例:

`import axios from 'axios';

// 创建axios实例 const instance = axios.create({ baseURL: 'api.example.com', timeout: 5000, headers: { 'Content-Type': 'application/json', }, });

// 请求拦截器 instance.interceptors.request.use( config => { // 给请求头添加token等信息 const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = Bearer ${token}; } return config; }, error => { return Promise.reject(error); } );

// 响应拦截器 instance.interceptors.response.use( response => { // 处理响应数据 if (response.status === 200) { return response.data; } else { return Promise.reject(response.data); } }, error => { // 统一处理请求错误 if (error.response) { console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); } else if (error.request) { console.log(error.request); } else { console.log('Error', error.message); } console.log(error.config); return Promise.reject(error); } );

// 封装GET请求方法 export const get = (url, params = {}) => { return instance.get(url, { params }); };

// 封装POST请求方法 export const post = (url, data = {}) => { return instance.post(url, data); }; `