目录
一、ES6(ES2015)
1. let 和const
1-1. var / let 和 const 三者的区别
var | let | const | |
---|---|---|---|
变量提升 | √ | × | × |
全局变量 | √ | × | × |
重复声明 | √ | × | × |
重复赋值 | √ | √ | × |
暂时性死区 | × | √ | √ |
块作用域 | × | √ | √ |
只声明不初始化 | √ | √ | × |
暂时性死区: ES6明确规定,如果区块中存在let命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用改变量。
注意: let和const 声明的变量,不会绑定在window上。
2. class(类)
在ES6之前,如果我们要生成一个实例对象,传统的方法就是写一个构造函数,例子如下:
function obj (name) {
this.name = name
}
obj.prototype.information = function () {
return '构造函数:' + this.name;
}
但是在ES6之后, 我们可以这样写:
class obj {
constructor(name){
this.name = name
}
information(){
return '构造函数:' + this.name;
}
}
3. 箭头函数
const obj = {
radius: 20 ,
diameter () {
console.log('1====',this.radius);
return this.radius * 2
},
perimeter: ()=>{
console.log('2====',this.radius);
return 2*Math.PI*this.radius
}
}
// 普通函数this指向调用者,obj, 最后结果是 40.
console.log(obj.diameter());
// 箭头函数this指向上文函数,此程序无上下文函数,所以this指向window ,而window下并未定义radius,因此this.radius是undefined,最后结果是NaN.
console.log(obj.perimeter());
3-1、箭头函数和普通函数区别
- 箭头函数是匿名函数
- 箭头函数不能绑定arguments, 取而代之用rest 参数…解决
- 箭头函数没有原型属性,故不能作为构造函数,不能使用new
- 箭头函数的this永远指向其上下文函数的this,没有办法改变其指向,普通函数的this指向调用它的对象,可改变其指向。
4. 函数参数默认值
function add (num = 0){
return num+1
}
5. 模板字符串
function add (num = 0){
return `返回结果:${num+1}`
}
6. 解构赋值
- 数组的元素是按次序排列的,变量的取值由它的位置决定;
- 对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
对象的重命名解构:
let { foo : color } = { foo:‘red’ }
解析:- foo 是用来做匹配的,用来去解构对象里面寻找值的
- color 才是变量名, color = ‘red’