总结:
-
var let const的区别
-
数组新增拓展
-
对象新增拓展
-
函数新增拓展
-
Set 和Map
-
Promise
-
Generator
-
Proxy
-
Module
-
Decorator
具体介绍:
1.var let const
一、var
1、在ES5中,顶层对象的属性和全局变量是等价的,用var
声明的变量既是全局变量,也是顶层变量:
- 顶层对象,在浏览器环境指的是
window
对象,在Node
指的是global
对象
2、使用var
声明的变量存在变量提升的情况
3、使用var
,我们能够对一个变量进行多次声明,后面声明的变量会覆盖前面的变量声明:
- 在函数中使用使用
var
声明变量时候,该变量是局部的 - 而如果在函数内不使用
var
,该变量是全局的
二、let
1、let
是ES6
新增的命令,用来声明变量
2、用法类似于var
,但是所声明的变量,只在let
命令所在的代码块内有效,不存在变量提:
- 只要块级作用域内存在
let
命令,这个区域就不再受外部影响
3、使用let
声明变量前,该变量都不可用,也就是大家常说的暂时性死区:
let
不允许在相同作用域中重复声明- 注意的是相同作用域,下面这种情况是不会报错的,因此,我们不能在函数内部重新声明参数
三、const
1、const
声明一个只读的常量,一旦声明,常量的值就不能改变:
const
一旦声明变量,就必须立即初始化,不能留到以后赋值- 如果之前用
var
或let
声明过变量,再用const
声明同样会报错
2、const
实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动:
- 对于简单类型的数据,值就保存在变量指向的那个内存地址,因此等同于常量
- 对于复杂类型的数据,变量指向的内存地址,保存的只是一个指向实际数据的指针,
const
只能保证这个指针是固定的,并不能确保改变量的结构不变
四、区别
1、变量提升:
var
声明的变量存在变量提升,即变量可以在声明之前调用,值为undefinedlet
和const
不存在变量提升,即它们所声明的变量一定要在声明后使用,否则报错
2、暂时性死区:
var
不存在暂时性死区let
和const
存在暂时性死区,只有等到声明变量的那一行代码出现,才可以获取和使用该变量
3、块级作用域:
var
不存在块级作用域let
和const
存在块级作用域
4、重复声明:
var
允许重复声明变量let
和const
在同一作用域不允许重复声明变量
5、修改声明的变量:
var
和let
可以const
声明一个只读的常量。一旦声明,常量的值就不能改变
五、使用
- 能用
const
的情况尽量使用const
,其他情况下大多数使用let
,避免使用var
二 数组新增拓展
一、扩展运算符的应用
1、ES6通过扩展元素符...
,好比rest
参数的逆运算,将一个数组转为用逗号分隔的参数序列:
- 主要用于函数调用的时候,将一个数组变为参数序列
- 可以将某些数据结构转为数组,能够更简单实现数组复制,数组的合并也更为简洁
2、扩展运算符可以与解构赋值结合起来,用于生成数组。如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错:
- 可以将字符串转为真正的数组
3、定义了遍历器(Iterator)接口的对象,都可以用扩展运算符转为真正的数组。如果对没有 Iterator 接口的对象,使用扩展运算符,将会报错
二、构造函数新增的方法
1、Array.from():将两类对象转为真正的数组:类似数组的对象和可遍历(iterable)
的对象(包括ES6
新增的数据结构Set
和Map
)
- 可以接受第二个参数,用来对每个元素进行处理,将处理后的值放入返回的数组
2、Array.of():用于将一组值,转换为数组
- 没有参数的时候,返回一个空数组
- 当参数只有一个的时候,实际上是指定数组的长度
- 参数个数不少于 2 个时,
Array()
才会返回由参数组成的新数组
三、实例对象新增的方法
1、copyWithin():将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组
- target(必需):从该位置开始替换数据。如果为负值,表示倒数。
- start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
- end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。
2、find()、findIndex():find()
用于找出第一个符合条件的数组成员
- 参数是一个回调函数,接受三个参数依次为当前的值、当前的位置和原数组
- findIndex返回第一个符合条件的数组成员的位置ÿ