1. let
声明变量只在所处的块级有效
if(true){
let a=10;
}
console.log(a); //a未定义
防止循环变量变成全局变量
for(let i=0;i<2:i++){}
console.log(i); //i is not defind
for(var i=0;i<2:i++){}
console.log(i); //2
不存在变量提升
console.log(a); //a is not defind
let a=100;
暂时性死区
var num=10;
if(true){
console.log(num) ; //num is not defind
let a=20;
}
拓展
var arr=[];
for (var i=0; i<2:i++){
arr[i]=function(){
console.log(i);
}
}
arr[0](); //2
arr[1](); //2
var arr=[];
for (let i=0; i<2:i++){
arr[i]=function(){
console.log(i);
}
}
arr[0](); //0
arr[1](); //1
2.const
使用const必须赋初始值,常量赋值后,值不可修改
const Pi;(X)
const Pi=3.14;(√)
三者区别
3.结构赋值(一一对应赋值)
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
对象结构
let person=[name:'zhangshan',age:'20'];
let [name,age]=ary;
console.log(name);//zhangshan
console.log(age);//20
let [name:myName,age:myAge]=person;
console.log(myName);//zhangshan
console.log(myAge);//20
4.箭头函数
const fn=()=>{
console.log(123);
}
fn();
const sum=(n1,n2)=>n1+n2;
const result=sum(10,20);
console.log(result);
箭头函数不绑定this关键字,箭头函数中的this,指向是函数定义位置的上下this.
const obj={name:'张三'}
function fn(){
console.log(this);
return()=>{
console.log(this);
}
}
const resFn=fn.call(obj);
resFn();
//zhangsan
5.剩余函数
function sum=(...args)=>{
let total=0;
args.forEach(item)=>total+= item);
retuen total;
};
sum(10,20);//30
剩余函数和结构函数配合使用
let ary1=['张三','李四','王五'];
let [s1,...s2]=ary1;
console.log(s1)//zhangsan
console.log(s2) //lisi wangwu
6.扩展运算符
let ary=["a","b","c"];
console.log(...ary)//a b c
console.log("a","b","c")
合并数组
let ary1=[1,2,3];
let ary2=[4,5,6];
let ary3=[...ary1,...ary2];
console.log(ary3)//1 2 3 4 5 6
ary1.push(...ary2)
console.log(ary1)//1 2 3 4 5 6
将类数组或者遍历对象转换为真正的数组
var oDivs=document.getElementsBytagName('div');
console.log(oDivs);
var ary =[...oDivs];
ary.push("a");
console.log(ary);