解构赋值
- ES6中允许从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构。
数组解构
变量与数组中的元素个数一致
let ary=[1,3,5];
let [a,b,c]=ary;
let [x,y,z=10]=[1,2,3];
变量多于数组中元素个数
let ary =[1,3,5];
let [a,b,c,d,e]=ary;
变量少于数组中元素个数
let [a,b]=[1,3,5];
let [,,a]=[1,3,5];
let [a,b,...c]=[1,3,5,7,9];
对象解构
变量与对象属性个数一致
变量名与属性名一致的写法
let person={name:"Nick",age:18};
let {age,name}=person;
let {name,age}=person;
let {name:name,age:age}={name:"Nick",age:18};
let age,name;
({name,age}={name:"Nick",age:18});
let {name,age=100}={name:"Nick",age:18};
let {name,age,friends:[f1,f2,f3]}={name:"Nick",age:18,friends:["Tony","Jack","Lisa"]};
console.log(name,age,f1,f2,f3);
变量名与属性名可以不一致的写法
let person={name:"Nick",age:18};
let {name:windowName,age:windowAge}=person;
其他数据类型的解构
let [x,y]="123";
let [x,y]=1;
let {a}=1;
console.log(a);
函数参数的解构赋值
function getA([a,b,c,..d]){
console.log(a,b,c,d);
}
getA([1,2,3,4,5]);
function getB({name,age=18}){
console.log(name,age);
}
getB({name:"Nick"});
getB();
function getA1({name="Nick",age=18}={}){
console.log(name,age);
}
getA1();
getA1({});
function getA2({name,age}={name:"Nick",age:18}){
console.log(name,age);
}
getA2();
gerA2({});
箭头函数
- es6中新增的定义函数的方式,用来简化函数定义。
- ()=>{}
- const fn=()=>{};
省略大括号的情况
- 函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号。
function sum(num1,num2){
return num1+num2;
}
const sum=(num1,num2)=>{
return num1+num2;
}
const sum=(num1,num2)=>num1+num2;
省略小括号
function fn(v){
return v;
}
const fn=v=>{
return v;
}
const fn=v=>v;
console.log(fn(1));
this关键字
- 箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置上下文的this。
const obj={name:"Nick"};
function fn(){
console.log(this);
return()=>{
console.log(this);
}
}
const newFn=fn.call(obj);
newFn();
function fn(){
console.log(this);
return()=>{
console.log(this);
}
}
let ret =fn();
ret();
var age=100;
let obj={
age:20,
say:()=>{
alert(this.age);
}
}
obj.say();
箭头函数没有arguments
let fn=()=>{console.log(arguments);};
fn();
let fn1=(...args)=>{console.log(args);};
fn1(1,2,3,4);
箭头函数不可以用作构造函数,不可以使用new操作符。
let F=()=>{};
console.log(new F);