块级作用域构造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