es6面试题

ES6面试题

var、let、const区别

共同点:都是可以声明变量

区别:

1、var具有变量提升机制,let和const没有

2、var 声明的变量是函数作用域或全局作用域,而 const 和 let 声明的变量是块级作用域。

3、var可以多次声明同一个变量,let和const不可以

4、const 声明的变量必须进行初始化赋值,而 var 和 let 声明的变量可以不进行初始化赋值。

作用域考题

考题一:

Var没有自身的作用域,所以var n=1,打印是1

考题三:

将下列对象合并

方式一:Object.assign

方式二:

方式三:自己封装

箭头函数和普通函数的区别?

1、this指向的问题

箭头函数的this是在箭头函数定义时就决定的,而且是不可修改的(不可用call、apply、bind)

****箭头函数的this指向定义时候、外层第一个普通函数的this

2、箭头函数不能new(不能当作构造函数)

3、箭头函数没有prototype

4、箭头函数没有arguments对象

Promise是什么,它的API有哪些?

1、- Promise是es6新增的语法,用来处理异步请求,解决了es5中回调地狱的问题

2、- Promise的回调函数中接收两个参数,第一个表示请求成功的回调,第二个表示请求失败的回调,分别是resolve和reject。

3、- 使用.then()去获取结果,使用.catch()去捕获异常,并且上一个Promise的执行结果会返回一个Promise对象。

  • Promise.all()和Promise.race()

使用场景:

有些时候我们做一个操作可能得同时需要不同的接口返回的数据,这时我们就可以使用Promise.all;

有时我们比如说有好几个服务器的好几个接口都提供同样的服务,我们不知道哪个接口更快,就可以使用Promise.race,哪个接口的数据先回来我们就用哪个接口的数据。

Promise有几种状态

有3种状态

4、pending(进行中)

5、fulfilled(已成功)

6、rejected(已失败)

async和await?区别?如何用?工作原理?

Async用来定义函数的,是一个异步函数,打印这个函数名会得到promise这个对象,(函数名称.then(函数名称调用then方法,就是promise调用then方法)

Await 后面加表达式,一般使用promise的表达式

工作原理:

Async执行成功会有返回值,内部调用promise.resolve()

  1. Promise是ES6中处理异步请求的语法,使用.then()来实现链式调用,使用.catch()来捕获异常。
  2. async/await 是对Promise的升级,
    async用于声明一个函数是异步的,
    await是等待一个异步方法执行完成(await一个Promise对象)
    await = promise.then成功的情况。
    async/await的捕获异常可以使用try/catch语法。(也可以使用.catch语法)
    find和filter的区别,
    find是查找符合的,返回第一个,
    filter是筛选所有符合的
    区别一:返回的内容不同
    filter返回的是新数组
    find返回的是具体内容
    区别二:
    Find匹配到第一个即返回
    Filter:返回整体(每一个匹配都加入数组,返回这个数组)"

some和every的区别,

some判断是否有符合的,如果有一项就返回true,返回true或false

every判断数组里每一项是否都符合,全部匹配返回true,返回true或false

flat与flatMap使用

1、flat:数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组"拉平",变成一维的数组。该方法返回一个新数组,对原数据没有影响。

javascript 复制代码
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]

flat()默认只会"拉平"一层,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。

如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。

如果原数组有空位,flat()方法会跳过空位

javascript 复制代码
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]

[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]

[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]

//如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

2、flatMap()方法:对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。

该方法返回一个新数组,不改变原数组。

flatMap()只能展开一层数组。

javascript 复制代码
// 相当于 [[[2]], [[4]], [[6]], [[8]]].flat()
[1, 2, 3, 4].flatMap(x => [[x * 2]])
// [[2], [4], [6], [8]]
相关推荐
I_Am_Me_6 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
雯0609~13 分钟前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ16 分钟前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z22 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
前端百草阁1 小时前
【TS简单上手,快速入门教程】————适合零基础
javascript·typescript
彭世瑜1 小时前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4041 小时前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish1 小时前
Token刷新机制
前端·javascript·vue.js·typescript·vue
zwjapple1 小时前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five1 小时前
TypeScript项目中Axios的封装
开发语言·前端·javascript