ES6

111 阅读1分钟

块级作用域构造let和const

原本的var无论在哪里申明,都会被当成在当前作用域顶部就申明的变量

let

  • 防止变量的重复申明
  • 同一作用于下,不能使用let重复定义已经存在的标识符

const

  • 常量必须在声明时初始化(赋值)
  • 后续不能更改,对象可以更改里面属性或值,对象本身的绑定不能修改

全局块作用域绑定

全局var创建的变量会挂到window上,有可能会覆盖原有的window属性。let和const不会创建全局的

模板字面量

多行字符串 ``

  • 输出为字符串,中间直接换行

字符串占位符 ${}

  • 将变量或JS表达式嵌入占位符中并将其作为字符串的一部份输入到结果中
  • 可以嵌入另一个模板字符串

rest参数

在函数的命名参数前添加...,就表明是个rest参数,用于获取函数多余的参数。rest参数是个数组,包含自它之后传入的所有参数,通过这个数组逐一访问里面的参数

  • 每个函数最多声明一个rest参数,并且只能时最后一个参数
 function calculate(op,...data){
      if(op==="+"){
        let result =0
        for(let i=1;i<data.length;i++){
          result +=data[i]
        }
        return result
      }
      else if(op==="*"){
        let result=1
        for(let i=1;i<data.length;i++){
          result *=data[i]
        }
        return result
      }
    }
    calculate('+',1,2,3) //1+2+3=6
    calculate('+',1,2,3) //1*2*3=6

展开运算符...

可以将一个数组转换为各个独立的参数,也可以用于取出对象的所有可遍历属性

  • 用来复制数组
  • 可取出对象的所有属性(键值对)
let arr1=['a']
let arr2=['b','c']
let arr3=['d','e','f']
let arr =[...arr1,...arr2,...arr3] //['a','b','c','d','e','f']

箭头函数注意点

  • 没有this,super,arguments和new.target绑定。箭头函数中的这些值通过由外围最近一层非箭头函数决定
  • 不能用new关键字调用。不能被用作构造函数
  • 没有原型。不存在prototype
  • 不能改变this的绑定。函数内部的this值不可被改变
  • 不支持arguments对象。只能通过命名参数和rest参数两种形式访问函数的参数

类的继承

  • 如果派生类中定义了构造函数,则必须调用super(),而且一定要在访问this之前调用
  • 如果派生类中没有定义构造函数,那么会自动调用super()并传入所有参数
class Person{
  constructor(name){
  	this.name=name
  }
  work(){
    console.log(`${this.name}正在working`)
  }
}

//定义了构造函数constructor
class Student extends Person{
  constructor(name,age){
   super(name)
   this.age=age
  }
  learn(){
    console.log(`${this.age}岁的${this.name}正在learning`)
  }
} 

//没有定义构造函数
class Teacher extends Person{
}
let teacher= new Teacher('luna')
teacher.work()// luna正在working