用于声明关键字 let const
- let声明的变量只在所处的块级作用域有效
可以防止循环变量变成全局变量。在一个大括号中,使用let关键字声明的变量才具有块级作用域,var关键字不具备这个特点
if (true) {
let a = 10;
}
console.log(a) // a is not defined
- let不存在变量提升
只能先声明再使用
console.log(a); // a is not defined
let a = 20;
- 使用let关键字声明的变量具有暂时性死区特性
一旦在块级作用域终使用let声明这个变量,这个变量就会和这个块级作用域进行整体的绑定
var tmp = 123;
if (true) {
console.log(tmp) //if这个块级作用域里面的tmp和外面的tmp没有关系,不会往上查找tmp,这里输出tmp is not defined
let tmp = 'abc';
}
解构赋值
Es6中允许 从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构
数组解构
let ary = [1,2,3];
let [a,b,c,d,e] = ary; //左边是变量解构,右边是赋值
console.log(a) //1
console.log(b) //2
console.log(c) //3
console.log(d) //undefined
console.log(e) //undefined
对象解构
对象解构允许使用变量的名字匹配对象的属性,匹配成功将对象的属性值赋值给变量
let { name, age, sex } = person;
let person = { name: 'zz', age: 18, sex: '女' }
console.log(name); //zz
console.log(age); //18
console.log(sex); //女
let { name: myName, age: myAge } = person //myName myAge属于变量; name age只是用于属性匹配
console.log(myName) //zz
console.log(myAge) //18
箭头函数
ES6中新增的定义函数的方式
箭头函数是用来简化函数定义语法的
- 函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号
- 如果形参只有一个,可以省略小括号
- 箭头函数不绑定this关键字,箭头函数中的this,指的是
箭头函数定义位置的上下文this
()=> {}
const fn = (形参)=> {}
function sum(a,b){
return a+b
}
const sum = (a,b) => a+b
const fn = v => alert(v)
箭头函数面试题
//var age=100; 如果加了这个属性,弹出来就是100
var obj = {
age:18,
say:() =>{
//当前箭头函数定义在obj这个对象里面,但是对象没有作用域,所以这个箭头函数实际上被定义在全局作用域下,
//这里的this指向window,但是window并没有age属性
alert(this.age) //弹出undefined
}
}
obj.say();
剩余参数
剩余参数语法允许我们将一个不定数量的参数表示为一个数组
const sum = (...args) => {
let total = 0;
//args.forEach((items) => { total += items })
args.forEach(items => total += items)
return total
}
console.log(sum(10, 20)) //30
console.log(sum(10, 20, 30)) //60
剩余参数和解构配合使用
Array的扩展方法
String的扩展方法
Set数据结构