ES6 面试题
新增了哪些属性?
- 新增块级作用域:let、const
- 新增数据类型:Symbol 表示独一无二的值
- 新增数据结构:
- Set,类似数组,所有数据是唯一的;
- Map,键值对的结合,传统的 Object 只能使用字符串作为键,Map 可以使用任何类型的值作为键值
- 新增箭头函数:let func = () => {}
- 新增模板字符串:用反引号表示(`)
- 新增结构赋值:按照一定模式,从数组、对象中取值,对变量进行赋值
- 新增 Promise、Async/Await 异步编程解决方案
- 新增展开运算符:...
- 模块开发:export、import
- 新增 class 类
- 新增 for...of...循环,可以遍历数组、Set、Map 结构
let、const、var 的区别?
let
和const
声明变量不会有变量提升,var
会出现变量提升(另外一种说法:let 变量也会提升,只不过因为暂时性的限制,不能再 let 声明变量之前使用)let
和const
是块级作用于,var
是函数级作用域let
和const
不允许重复声明(会抛出错误)let
和const
声明变量之前使用,会抛出错误(暂时性死区)const
声明的是只读的常量,声明之后不可改变
你是怎么理解 Set、Map 两种数据结构的?
Set
是一种集合的数据结构,(集合:由无序且不重复的元素组成,)
Map
是一种字典的数据结构,(字典:由一些元素组成,每个元素都是[键,值]的形式)
1、Set
Set
是一种集合的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值(一般称为集合)
Set 本身是一个构造函数,用来生成 Set 数据结构
const s = new Set()
实例方法:
- add()
添加某个值,可采用链式写法
返回 Set 结构本身
s.add(1).add(2)
- delete()
删除某个值,返回一个布尔值,表示删除是否成功
s.delete(1)
- has()
检测某个元素是否存在,返回一个布尔值
s.has(1)
- clear()
清空所有元素,没有返回值
s.clear()
- size
获取集合中元素的个数
s.size
注意:基本类型的值不能重复,复杂类型的是可以重复的
let arr = [1, 2, 2, 1, { a: 1 }, { a: 1 }]
const res = [...new Set(arr)]
console.log(res)
// [1, 2, {a: 1}, {a: 1}]
2、Map
Map
是键值对的列表,键和值可以是任意类型
Map
本身是一个构造函数,用来生成 Map
数据结构
const map = new Map()
- set()
设置键值,可采用链式写法,返回整个 Map 结构
如果 key 已经有值,则键值会被更新,否则就新生成键
map.set(undefined, 'und')
map.set(1, 'a').set(2, 'b')
- get()
get 方法读取 key 对应的键值,如果找不到 key,返回 undefined
map.get(1)
- has()
has 方法监测 Map 中是否存在某个键,返回一个布尔值
map.has(1)
- delete()
delete 方法删除某个键。删除成功返回 true,失败返回 false
map.delte(1)
- clear()
clear 方法清空所有成员,没有返回值
map.clear()
- size
size 属性返回 Map 结构的成员总数
map.size
谈谈你对 Promise 的理解?
定义:
Promise 是异步编程的一种解决方案
Promise 本身是同步立即执行函数,.then
是异步的
特点
- 对象的状态不受外界影响
- 一旦状态改变就不会再变
三个状态
pending
(等待)、fulfilled
(成功)、rejected
(失败)
两个过程
resolve
函数执行时,会从 pending
变成 fulfilled
rejecte
函数执行时,会从 pending
变成 rejected
Promise 的静态方法都有哪些?
Promise.resolve()
抛出一个成功回调,.then
捕获Promise.reject()
抛出一个异常回调,.catch
用于捕获处理异常Promise.all([promise1, promise2, promise3])
接收一个promise
数组,是在所有promise
都完成后执行。可以用于处理一些并发的任务Promise.race([promise1, promise2, promise3])
接受一个promise
数组,里面哪个结果快,就返回哪个结果,不管结果本身是成功状态还是失败状态Promise.allSettled([promise1, promise2, promise3 ])
接受一个promise
数组,会返回一个对象数组,每个对象表示对应的promise
结果,适用于彼此不依赖的异步任务或者想知道每个promise
的结果时Promise.any([promise1, promise2, promise3])
主要用于返回第一个成功的promise
。只要有一个promise
成功此方法就会终止,它不会等待其他的promise
全部完成。
ES6新增哪些属性?
- 新增块级作用域:let、const
- 新增数据类型:Symbol 表示独一无二的值
- 新增数据结构:
- Set,类似数组,所有数据是唯一的;
- Map,键值对的结合,传统的Object只能使用字符串作为键,Map可以使用任何类型的值作为键值
- 新增箭头函数:
let func = () => {}
- 新增模板字符串:用反引号表示(`)
- 新增结构赋值:按照一定模式,从数组、对象中取值,对变量进行赋值
- 新增
Promise
、Async/Await
异步编程解决方案 - 新增展开运算符:
...
- 模块开发:
export
、import
- 新增class类
- 新增for...of...循环,可以遍历数组、Set、Map结构
let、const、var的区别?
- let 和 const声明的变量不会出现提升,var声明的变量会出现提升(另外一种说法:let变量也会提升,只不过因为暂时性的限制,不能再let声明变量之前使用)
- let 和 const是块级作用域,var是函数级作用域
- let 和 const不允许重复声明(会抛出错误)
- let 和 const声明变量之前使用,会抛出错误(暂时性死区)
- const 声明一个只读的常量,一旦声明,不可以改变
Symbol
表示独一无二的值
let a = Symbol(1)
let b = Symbol(1)
console.log(a === b)
// false
使用场景1
let obj = {
// ...
}
let sym = Symbol('name')
obj[sym] = 'ada'
console.log(obj[sym])
//ada
使用场景2
let info = [
{'小明': 50},
{'小明': 44},
{'阿达': 33},
]
let obj = {}
info.forEach(item => {
let key = Object.keys(item)[0]
let value = item[key]
obj[Symbol(key)] = value
})
console.log(obj)
// {Symbol(小明): 50, Symbol(小明): 44, Symbol(阿达): 33}
Set
集合里面的基本类型的值不能重复,复杂类型的值可以重复
let arr = [1, 2, 2, 1, {a: 1}, {a: 1}]
const res = [...new Set(arr)]
console.log(res)
// [1, 2, {a: 1}, {a: 1}]
静态方法:
- 添加元素:
s.add()
返回值是Set结构本身 - 删除元素:
s.delete()
返回一个布尔值,true删除成功,false删除失败 - 检测是否存在某个元素:
s.has()
返回一个布尔值,true代表存在,false不存在 - 清除集合的元素:
s.clear()
- 获取元素的个数:
s.size
Promise是什么?
定义:
Promise
是异步编程的一种解决方案
Promise
本身是同步立即执行函数,.then 是异步的
特点:
- 对象的状态不受外界影响
- 一旦状态改变就不会再变
三个状态:
pending
(等待)、fulfilled
(成功)、rejected
(失败)
两个过程:
resolve
函数被执行时,会从pending
变成 fulfilled
成功
rejecte
函数被执行时,会从pending
变成 rejected
失败
Promise的静态方法?
Promise.resolve()
Promise.reject()
抛出一个异常,.catch用于捕获处理异常Promise.all([promise1, promise2, promise3])
接收一个promise数组,是在所有promise都完成后执行。可以用于处理一些并发的任务Promise.race([promise1, promise2, promise3])
接受一个promise数组,里面哪个结果快,就返回哪个结果,不管结果本身是成功状态还是失败状态Promise.allSettled([promise1, promise2, promise3 ])
接受一个promise数组,会返回一个对象数组,每个对象表示对应的promise结果,适用于彼此不依赖的异步任务或者想知道每个promise
的结果时Promise.any([promise1, promise2, promise3])
主要用于返回第一个成功的promise
。只要有一个promise
成功此方法就会终止,它不会等待其他的promise
全部完成。
async / await 是什么?
从内部实现来说其实就是Generator的语法糖,基于Promise,并于所有现存的基于Promise的API兼容
async关键字
- async 关键字用于声明一个异步函数(如 async function test(){...})
- async 会自动将常规函数转换成Promise,返回值也是一个Promise对象
await 关键字
- await 用于等待异步功能执行完毕 (如 let res = await test())
- await 只能再 async 函数内部使用
- await 只能用与Promise 一起调用,await放置在Promise调用之前,会强制async函数中其他异步代码等待,直到Promise完成并返回结果
相较于Promise,async / await有何优势?
- 代码清晰,提升了代码的阅读体验 (promise虽然摆脱了回调地狱,但then链式调用的阅读负担还是存在的)
- 可以使用try / catch 进行错误处理(async / await 可以用成熟的try / catch做处理)
- 调式时的阅读性,也相对更友好(调用多个Promise,Promise链中某个地方抛出错误,不会给出错误发生的位置,不能在.then代码块中设置断点)
缺点:try..catch内部的变量无法传递给下一个try...catch
箭头函数和普通函数的区别?
- 箭头函数作为匿名函数,不能使用
new
关键字 - 箭头函数不绑定
this
,会捕获上下文this
,作为自己的this
值,任何方法都改变不了this
指向,(call(),bind(),apply()) - 箭头函数不绑定arguments,用rest参数替代
普通函数:可以使用arguments,也可以使用rest
function showArgs(a,b,c){
console.log(arguments[2]) // 3
}
showArgs(1,2,3)
箭头函数:不绑定arguments,es6引入rest参数(形式为...变量名
)
let showArgs = (...args) => {
console.log(args)
}
showArgs(1,2,3,4,5)
exports, module.exports, export defaul 区别?
exports:导出的是模块函数本身,可以有多个
exports.func = function () {}
引入(需要加括号):
import {func} from './test'
module.exports:导出的是模块对象本身,当文件中出现多个,后面的module.exports会覆盖以前的
module.exports = { func: function () {} }
引入(可加可不加,不加就是引入模块对象本身):
import module from './test'
export default:只能有一个
export default function func() {console.log(1)}
引入(不用加括号):
import func from './test'
ES6 面试题的更多相关文章
- ES6面试题总结
1.说出至少5个ES6的新特性,并简述它们的作用.(简答题) 1.let关键字,用于声明只在块级作用域起作用的变量: 2.const关键字,用于声明一个常量: 3.结构赋值,一种新的变量赋值方式.常用 ...
- es6面试题--Promise相关
1. const promise = new Promise((resolve, reject) => { console.log(); resolve(); console.log(); }) ...
- 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)
写在前面 参考答案及资源在看云平台发布,如果大家想领取资源以及查看答案,可直接前去购买.一次购买永久可看,文档长期更新!有什么意见与建议欢迎您及时联系作者或留言回复! 文档描述 本文是关注微信小程序的 ...
- js经典试题之ES6
js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...
- 深入理解ES6箭头函数的this以及各类this面试题总结
ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性,俘获了大批粉丝儿 它也可能是面试中的宠儿, 我们关键要搞清楚 箭头函数和普通函数中的this 一针见血式总结: 普通函数中的 ...
- ES6深入浅出-1 新版变量声明:let 和 const-3.视频 相关面试题
执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码 ...
- 56 道高频 JavaScript 与 ES6+ 的面试题及答案
56 道高频 JavaScript 与 ES6+ 的面试题及答案 :https://segmentfault.com/a/1190000020082089?utm_source=weekly& ...
- (转载) 深入理解ES6箭头函数的this以及各类this面试题总结
声明:本文转载自 https://blog.csdn.net/yangbingbinga/article/details/61424363 ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取 ...
- 【面试题】ES6语法五之箭头函数
ES6特性=>. function foo(x, y){ return x + y } var foo = (x, y) => x + y 包括一个参数列表(零个或多个参数,如果参数不是一 ...
- 前端面试题整理—ES6篇
1.es5和es6的区别,说一下你所知道的es6 ECMAScript5,即ES5,是ECMAScript的第五次修订,于2009年完成标准化 ECMAScript6,即ES6,是ECMAScript ...
随机推荐
- 使用.NET并行任务库(TPL)与并行Linq(PLINQ)充分利用多核性能
前言 最近比较闲,(项目要转Java被分到架构组,边缘化人员,无所事事 哈哈哈哈) 记录一下前段时间用到的.NET框架下采用并行策略充分利用多核CPU进行优化的一个方法 起因是项目中有个结算的方法,需 ...
- 关于 B 先生
B 先生是不是要疯了,他今天说的都是他妈什么几把
- USB总线-Linux内核USB设备驱动ftrace分析(十一)
1.简介 USB Gadget Driver定义了很多trace event,使用者可以在用户空间通过ftrace接口,追踪USB Gadget Driver的行为. USB设备控制器驱动定义的tra ...
- os.path.basename()和os.path.splitext()
1.os.path.splitext()是用来分离文件名与扩展名: 2.os.path.basename()他返回的是一个base name,我认为就是路径最后一个文件名. import os fna ...
- 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
数据库告警.紧急问题处理这些项目对于大多数朋友来讲应该不陌生了.从墨天轮社区整理的"最受DBA欢迎的技术文档合辑"系列中可以发现,大家对"故障诊断专题"的热情居 ...
- iOS中修饰符常用小结
1.copy,是复制引用对象地址的深拷贝 a:当修饰不可变类型的属性时,如NSArray.NSDictionary.NSString,用copy,用copy为关键字的话,调用setter方法后.是对赋 ...
- 1. react项目【前端】+C#【后端】从0到1
1.创建前端基础框架 1.1 前端创建 软件: 1.1.1 npx create-react-app pc ps:pc 是文件名 : 1.1.2 npm start 启动项目 2.创建后端基础框架 软 ...
- 基于 JuiceFS 的 KubeSphere DevOps 项目数据迁移方案
方案背景和目的 KubeSphere 自发布以来已有 2 年之久,从 2.1.0 版本至目前最新版本 3.3.开发人员的编译构建都基于环境平台的 DevOps 功能(底层是 jenkins)实现,如果 ...
- 链表反转(反转全部,前n个,中间)
链表反转 反转全部 // 迭代 struct ListNode *reverseList(struct ListNode *head) { struct ListNode *pre = NULL; s ...
- Abp源码分析之Abp最小系统
最小系统 创建API项目 创建API项目并安装以下依赖 修改Program.cs为以下内容 using BookApp; var builder = WebApplication.CreateBuil ...