1.var let const的区别:
·var声明变量能够重复声明,let不能够重复声明;
·var是不受限于块级的,let是受限于块级的;
·能够在var声明的变量前面访问,不能够在let声明变量以前访问;
·var会与window相映射(挂一个属性),而let不与window相映射;
·const声明以后必须赋值,且不可从新赋值,不然报错;
·const和let同样不可重复声明,支持块级做用域,在声明变量前面访问变量会报错,且不与window相映射。数组
2.解构赋值:
·数组解构:函数
let [a,b,c] = [1,2,3]; //a=1,b=2,c=3; let [a,[b],c] = [1,[2,3],4]; //嵌套数组解构a=1,b=[2,3],c=4; let [a,...b] = [1,2,3]; //数组拆分a=1,b=[2,3]; let [a,,b] = [1,2,3]; //不连续解构a=1,b=3; let [a,b] = [1,2,3]; //不彻底解构a=1,b=2;
·对象解构:this
let {a,b} = {a:'111',b:'222'}; //a='111',b='2222' let a; (a = {a:'1111'}); //以声明变量的方式解构 a='111' let [a,b,c,d] = 'nice'; //字符串解构 a='n',b='i',c='c',d='e'; let obj = {a:'111',b:{c:'222'}}; let {a,b:{c}} = obj; //嵌套解构a='111',c='222'
·函数参数的定义:
传参的时候不用在乎参数顺序问题,只须要参数名和值设置好便可code
function example(name,age,address){ console.log(name + age + address); } example({address:"这里",name:"名字",age:40});
·交换变量:对象
let [a,b] = [1,2]; [a,b] = [b,a]; console.log(a,b);
·函数参数设置默认值:作用域
function example({name="老王",age=40,address="这里"}={}){ console.log(name,age,address); } example(); //老王 40 这里
3.forEach、for in、for of三者区别:
·forEach更多用来遍历数组;
·for in通常用来遍历数组或者对象和JSON,得到的是对象的key或数组、字符串的下标;
·for of经常使用于遍历数组、对象,得到的是对象、数组的值;字符串
let a = [1,2,3,4]; for (let i in a){ console.log(i); //0,1,2,3 (数组下标) } for(let i of a){ console.log(i); //1,2,3,4 (数组元素值) } a.forEach((item)=>{ console.log(item); //1,2,3,4 });
4.箭头函数注意的地方:
<1>用了箭头函数,箭头函数的this为父做用域的this,不是调用时的thisit
let person= { name: "老王", callName:function(){ //callName为function (()=>{ //function里面包含一个当即执行的箭头函数 console.log(this.name); //老王 })(); } }; person.callName();
上面的例子callName为function,他的this为调用它的对象也就是person。而callName内部的箭头函数this指向为父做用域的this,因此this.name可以取得值。
咱们再来看下面的例子:io
let person= { name: "老王", callName:()=>{ //callName为function (()=>{ //function里面包含一个当即执行的箭头函数 console.log(this.name); //undefined })(); } }; person.callName();
这个例子的callName为箭头函数,因此此时它的this指向了它的父做用域也就是window(原本指向调用它的对象)。而后callName中的箭头函数也指向它的父做用于,也就是window,因此访问不了person的name属性。console
<2>箭头函数不能做为构造函数,不能使用new: