文章目录
1.简单讲一讲ES6的一些新特性:
-
let、const变量,块级作用域。
- ES5只有全局作用域和函数作用域,块级作用域的好处是不再需要立即执行的函数表达式,循环体中的闭包不再有问题。
-
解构赋值
-
各种数据类型扩展的方法:
-
数组:扩展运算符…
-
如字符串方面的模板字符串
-
函数:
- 默认参数
- rest参数:用于代替arguments对象,是一个真正的数组
- 箭头函数
-
对象方面属性的简洁表达方式
-
-
引入了新的基本数据类型Symbol
-
引入了新的数据结构Set和Map
-
引入了promise,generator,async/await,更强大的异步解决方案
-
引入了Class类的概念,通过Class可以更好的实现面向对象编程
-
引入了ES6模块的概念,便于模块化编程。其模块功能主要有两个命令构成,export和import,export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能
2.let const var的区别 :
var | let , const | |
---|---|---|
作用范围 | 没有块级作用域的概念 | 只能在块级作用域使用 |
变量提升 | 存在 | 不存在 |
是否允许重新赋值 | 可以 | let可以,const不可以 |
在全局执行环境下声明的变量是否会被挂载到window对象上 | 会 | 不会 |
是否允许重新定义 | 可以 | 不可以 |
特性 | 声明的const变量必须赋初值 |
3.箭头函数:
(1)箭头函数与普通函数的区别:
没有绑定this,在箭头函数中使用this时,是沿着作用域链向上查找,返回最近的this。
不能通过this调用
没有arguments对象
(2)箭头函数获取arguments对象:
使用…rest参数:
function fn(...params) {
console.log(params);//[ 1, 2, 3, 4 ]
console.log(arguments);//[Arguments] { '0': 1, '1': 2, '2': 3, '3': 4 }
}
fn(1,2,3,4)
注意:返回的是一个真实的数组,ES5中的arguments返回的是伪数组,其实是一个对象。
arguments可以通过ES6中的Array.from转换为真正的数组。
4.简单介绍一下symbol:
Symbol是es6引入的一种新的基本数据类型。
特性之一就是可以用于创建唯一的标识,可以避免为对象添加属性时的命名冲突。
特性之二是通过Symbol添加的属性具有一定的隐秘性,无法通过for…in和Obejct.keys访问。但是可以被Obejct.getOwnPropertySymbols(obj)访问到,该方法返回的是一个数组
5.对于js临时死区的理解:
ES6 明确规定,在块级作用域中声明的let,const变量,会形成封闭的作用域。凡是在声明之前就使用这些变量,就会报错。这种语法被称为暂时性死区(temporal dead zone ,简称 TDZ)
var temp = 123;
if(true){
console.log(temp);//ReferenceError: Cannot access 'temp' before initialization
let temp;
}
//“暂时性死区”也意味着typeof不再是一个百分之百安全的操作。
typeof x; // ReferenceError: x is not defined
let x;
ES6规定暂时性死区和let,const不出现变量提升的目的是为了减少运行时的错误。