文章目录
一、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有什么作用?
module、exort、import
是ES6用来统一前端模块化方案的设计思路和实现方案;export、import
的出现统一了前端模块化的实现方案,整合规范了浏览器/服务器的模块化方法,用来取代传统的AMD/CMD、requireJS、seaJS、commondJS
等等一系列前端模块的不同实现方案,使前端模块化更加统一规范,JS也能更加实现大型的应用程序开发;import
引入的模块是静态加载(编译阶段加载)而不是动态加载(运行时加载);import
和export
导出的接口值是动态绑定的,即通过接口,可以取到模块内部实时的值;
五、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 的区别?
setTimeout
的回调函数放在 宏任务队列 中,等到执行栈清空以后执行;Promise.then()
里的回调函数会放到 相应宏任务的微任务队列 中,等宏任务里面的同步代码执行完毕再执行;async
函数表示函数里面可能会有异步方法,await
后面跟一个表达式;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可以关闭连接;
...至此完毕,内容不全,请见谅,感谢各位看客大老爷们的批评指正!!!