ES6 新特性--面试题必备


一、ES6新特性

1、ES6有哪些新增特性

新增声明命令let、const
模板字符串
解构赋值
扩展运算符
函数的默认参数和箭头函数
模版字符串
Set、Map集合
新增class类
Proxy
Promise


二、箭头函数与普通函数的区别?

  • 箭头函数是匿名函数,不能作为构造函数,使用new关键字。
  • 箭头函数没有arguments
  • 箭头函数没有自己的this,会获取所在的上下文作为自己的this
  • call()、applay()、bind()方法不能改变箭头函数中的this指向
  • 箭头函数没有prototype
  • 箭头函数不能用作Generator函数,不能使用yeild关键字

三、var、let、const有什么区别?

  • 块级作用域: 块作用域由 { }包裹,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:
    1、内层变量可能覆盖外层变量
    2、用来计数的循环变量泄露为全局变量
  • 变量提升: var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。 给全局添加属性:
  • 浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。
    - 重复声明: var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。 初始值设置:
  • 在变量声明时,var 和let可以不用设置初始值。而const声明变量必须设置初始值。
  • 暂时性死区:在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。

四、module、export、import有什么作用?

  1. module、exort、import是ES6用来统一前端模块化方案的设计思路和实现方案;
  2. export、import的出现统一了前端模块化的实现方案,整合规范了浏览器/服务器的模块化方法,用来取代传统的AMD/CMD、requireJS、seaJS、commondJS等等一系列前端模块的不同实现方案,使前端模块化更加统一规范,JS也能更加实现大型的应用程序开发;
  3. import引入的模块是静态加载(编译阶段加载)而不是动态加载(运行时加载);
  4. importexport 导出的接口值是动态绑定的,即通过接口,可以取到模块内部实时的值;

五、Set 和 Map 的区别?

Set

  • Set对象允许存储任何类型的唯一值;
  • Set是值得合集,集合中的元素只能出现一次,即集合中的元素是唯一的;
  • 存放的是地址不同的引用数据类型和值不同的基本数据类型;
  • set.add():添加数据;
  • set.clear():清空数据;
  • set.delete():删除数据;
  • set.has():查找数据;

Map

  • Map对象是键值对的集合,Map中的一个键只能出现一次,它在Map的集合中是独一无二的;
  • 本质上是键值对的集合;
  • 读:map.get()
  • 写:map.set()
  • 清空:map.clear()
  • 查:map.has()
  • 删除:map.delete()
  • 区别

    应用场景

Set用于数组去重
Map用于数据存储;

  • Set:
  • 成员不能重复;
  • 只有键值没有键名,类似数组;
  • 可以遍历;
  • Map:
  • 本质上是键值对的集合,类似集合;
  • 可以遍历,可以跟各种数据格式转换;

六、扩展运算符为什么不能展开基本数据类型?

  • 在JS中,扩展运算符 ... 确实可以用来 “展开” 数组可迭代对象 的 元素;
  • 不能 直接应用于 基本数据类型,如数字、字符串或布尔值,这是因为基本数据类型 不具备 可迭代性,它们是不可分割 的 数据单体
  • 扩展运算符必须作用与能够返回多个值的结构上,而基本数据类型没有这样的内部结构;
  • 如果你想复制基本数据类型的值,直接赋值即可,因为它们本身就是按值传递的;

七、setTimeout、Promise、async/await 的区别?

  1. setTimeout的回调函数放在 宏任务队列 中,等到执行栈清空以后执行;
  2. Promise.then()里的回调函数会放到 相应宏任务的微任务队列 中,等宏任务里面的同步代码执行完毕再执行;
  3. async函数表示函数里面可能会有异步方法,await后面跟一个表达式;
  4. await方法执行时,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列中,让出执行栈让同步代码先执行;

八、ES6 和 commonjs 模块化规范的区别?

语法不同:ES6 模块使 import 和 export 关键字来导入和导出模块,而 CommonJS 模块使用 require 和 module.exports 或 exports 来导入和导出模块。

// ES6 模块
import { foo } from './module';
export const bar = 'bar';

// CommonJS 模块
const foo = require('./commonjs');
exports.bar = 'bar';

异步加载 : ES6 模块支持动态导入(dynamic import),可以异步加载模块。这使得在需要时按需加载模块成为可能,从而提高了性能。CommonJS模块在设计时没有考虑异步加载的需求,通常在模块的顶部进行同步加载。


九、介绍一下WebSocket

  • websocket是一种网络通信协议,是HTML5开始提供的一种在单个TCP连接上进行全双工通信的协议
  • 这个对比着HTTP协议来说,HTTP协议是一种无状态的、无连接、单向的应用层协议,通信请求只能由客户端发起,服务端对请求做出应答处理;
  • HTTP协议无法实现服务器主动向客户端发消息,webSocket链接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端;
  • webSocket只需建立一次连接,就可以一直保持连接状态
  • 连接⽅式也⾮常简单,new WebSocket(后台地址)实例化⼀个socket对象,其中open建⽴连接,send可以发送消息,onmessage可以接收消息,close可以关闭连接;

...至此完毕,内容不全,请见谅,感谢各位看客大老爷们的批评指正!!!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值