新增了哪些属性?

  • 新增块级作用域:let、const
  • 新增数据类型:Symbol 表示独一无二的值
  • 新增数据结构:
  • Set,类似数组,所有数据是唯一的;
  • Map,键值对的结合,传统的 Object 只能使用字符串作为键,Map 可以使用任何类型的值作为键值
  • 新增箭头函数:let func = () => {}
  • 新增模板字符串:用反引号表示(`)
  • 新增结构赋值:按照一定模式,从数组、对象中取值,对变量进行赋值
  • 新增 Promise、Async/Await 异步编程解决方案
  • 新增展开运算符:...
  • 模块开发:export、import
  • 新增 class 类
  • 新增 for...of...循环,可以遍历数组、Set、Map 结构

let、const、var 的区别?

  • letconst 声明变量不会有变量提升,var 会出现变量提升(另外一种说法:let 变量也会提升,只不过因为暂时性的限制,不能再 let 声明变量之前使用)
  • letconst 是块级作用于,var 是函数级作用域
  • letconst 不允许重复声明(会抛出错误)
  • letconst 声明变量之前使用,会抛出错误(暂时性死区)
  • 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 = () => {}
  • 新增模板字符串:用反引号表示(`)
  • 新增结构赋值:按照一定模式,从数组、对象中取值,对变量进行赋值
  • 新增PromiseAsync/Await 异步编程解决方案
  • 新增展开运算符:...
  • 模块开发:exportimport
  • 新增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 是异步的

特点:

  1. 对象的状态不受外界影响
  2. 一旦状态改变就不会再变

三个状态:

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 面试题的更多相关文章

  1. ES6面试题总结

    1.说出至少5个ES6的新特性,并简述它们的作用.(简答题) 1.let关键字,用于声明只在块级作用域起作用的变量: 2.const关键字,用于声明一个常量: 3.结构赋值,一种新的变量赋值方式.常用 ...

  2. es6面试题--Promise相关

    1. const promise = new Promise((resolve, reject) => { console.log(); resolve(); console.log(); }) ...

  3. 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    写在前面 参考答案及资源在看云平台发布,如果大家想领取资源以及查看答案,可直接前去购买.一次购买永久可看,文档长期更新!有什么意见与建议欢迎您及时联系作者或留言回复! 文档描述 本文是关注微信小程序的 ...

  4. js经典试题之ES6

    js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending  resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...

  5. 深入理解ES6箭头函数的this以及各类this面试题总结

    ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性,俘获了大批粉丝儿 它也可能是面试中的宠儿, 我们关键要搞清楚 箭头函数和普通函数中的this 一针见血式总结: 普通函数中的 ...

  6. ES6深入浅出-1 新版变量声明:let 和 const-3.视频 相关面试题

    执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码 ...

  7. 56 道高频 JavaScript 与 ES6+ 的面试题及答案

    56 道高频 JavaScript 与 ES6+ 的面试题及答案 :https://segmentfault.com/a/1190000020082089?utm_source=weekly& ...

  8. (转载) 深入理解ES6箭头函数的this以及各类this面试题总结

    声明:本文转载自 https://blog.csdn.net/yangbingbinga/article/details/61424363 ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取 ...

  9. 【面试题】ES6语法五之箭头函数

    ES6特性=>. function foo(x, y){ return x + y } var foo = (x, y) => x + y 包括一个参数列表(零个或多个参数,如果参数不是一 ...

  10. 前端面试题整理—ES6篇

    1.es5和es6的区别,说一下你所知道的es6 ECMAScript5,即ES5,是ECMAScript的第五次修订,于2009年完成标准化 ECMAScript6,即ES6,是ECMAScript ...

随机推荐

  1. SaaS业务架构:业务能力分析

    大家好,我是汤师爷~ 今天聊聊SaaS业务架构的业务能力分析. 业务能力概述 简单来说,业务能力是企业"做某事的能力". 业务能力描述了企业当前和未来应对挑战的能力,即企业能做什么 ...

  2. Kubernetes Deployment控制器(二十)

    前面我们学习了 ReplicaSet 控制器,了解到该控制器是用来维护集群中运行的 Pod 数量的,但是往往在实际操作的时候,我们反而不会去直接使用 RS,而是会使用更上层的控制器,比如我们今天要学习 ...

  3. php 生成唯一订单号

    php 生成唯一订单号4种方法   第一种 private function doCreateOrderNumber($time){ $i=1; $dd = date('Ymd',$time); $a ...

  4. CF753B题解

    这应该算是一个很脍炙人口的小游戏了吧 (没玩过算我没说) 因为一共有 \(50\) 次询问机会,那最简单直接的方法就不难想到. 我们把 \(0 \sim9\) 全部询问一遍,如果回答两个整数不全为 \ ...

  5. 2021年9月国产数据库排行榜-墨天轮:达梦奋起直追紧逼OceanBase,openGauss反超PolarDB再升一位

    2021年9月国产数据库排行榜已在墨天轮发布,本月参与排名的数据库总数达到了142个. 一.9月国产数据库流行度排行榜前15名 先来看看排行榜前五名,虽然PingCAP的TiDB分数本月下降31.82 ...

  6. iOS开发Block使用详解

    项目开发中经常会用到页面之间传值的问题,常用的方法是通知.单例.代理.block等.最近项目忙完,有空细细研究了一下block的用法,收货多多. block又称闭包,它的实现原理是c语言的函数指针.函 ...

  7. 一张图带你了解.NET终结(Finalize)流程

    简介 "终结"一般被分为确定性终结(显示清除)与非确定性终结(隐式清除) 确定性终结主要 提供给开发人员一个显式清理的方法,比如try-finally,using. 非确定性终结主 ...

  8. 立即报名 | 云原生 + AI Meetup 成都站 11.4 正式开启

    2023 年,KubeSphere 社区已经在深圳.杭州.上海三个城市各组织了一场线下 Meetup.第四站,我们将走进天府成都. 11 月 4 日,云原生 + AI Meetup 成都站将正式开启! ...

  9. cornerstone中RAFT的buffer的实现

    1.概览: 谈到raft协议实现就绕不开网上流行的mit6.824,但其为go语言,官方没有lab的答案,框架也很晦涩难懂,且全网没有一个博客对其有清晰的解释,有的只是甩一堆名词然后直接贴没有任何注释 ...

  10. 题解:P9784 [ROIR 2020 Day1] 超速

    传送门 洛谷题解 思路 我们设 \(T\) 为所花的总时间,\(d\) 为超速多少. 然后不难知道 $ T = \sum_{i = 1}^{n} \frac{l_i}{v_i+d}$,所以我们实际上是 ...