1.解构赋值
//数组结构
var [a,b,c]=[1,2,3]; //a=1,b=2,c=3
//对象结构
var {name:name,age:age}={name:'tom',age:3}
var {name,age}={name:'tom',age:3} //前后一致,可以省略等号前面的前面的name
var {name:username,age:userage}={name:'tom',age:3} //值赋给了username和userage
var [a,b,c,d]=[1,2,3] //d是undefined,多余的值被定义为undefined,不管多余的变量在等号左边还是右边
var a=[2,3,4];
var b=[1,...a,5];//b=[1,2,3,4,5];...用着数组前,展开数组
var [b,...c]=[1,2,3,4,5];//b=1,c=[2,3,4,5];...用着变量前,会把所有剩余值合到一个数组中
var [a,b,c,d=4]=[1,2,3];//等号左侧给d一个默认值,当右侧没有d相对应的值,d使用默认值,有对应值,d使用对应值
对象解构赋值中,前面的变量name:name中前一个name和等号后面name参数一致,可以等号前面的前面的name
ps:对象object解构赋值中如果省略了声明关键字var/let/const,需要用()阔气来,不然{}会被当成块语句
//x是解构赋值,y是参数默认值
function aa({x=1}={},{y}={y:2})
aa({},{})//1,undefined
2.简洁写法
var user={
name:name,
age:age,
play:function(){}
}
//简洁写法,同名属性可以省略,只写一个,方法可以直接写()
var user={
name,
age,
play(){}
};
3.对象属性名可以是变量
var key='name';
user[key]='tom';//对象user的属性name可以通过变量key取到
4.模板字面量
用Esc键盘下的``包含带变量的模板,变量用${}包围,再也不用拼接字符串了${}大括号内部可以包含函数,表达式
var name='tom';
var say=`hi,${name}`;//hi,tom
${}作用域:
var name='tom';
function son(str){
var name="tom son";
console.log(str);
}
function father(){
var name="tom father";
son(`hi,${name}`)
}
father();//hi,tom father,在father函数内部找到变量name
函数参数中模板字符串解构,会将常量字符串解构到第一个参数数组中,字符串变量放在第二个参数中
function dispatch(strings,...values){
console.log(strings);
console.log(values);
}
var name='tom',age=18
dispatch`hi,my name is ${name},i am ${age} years old.`;
console: (3) ["hi,my name is ", ",i am ", " years old.", raw: Array(3)]
(2) ["tom", 18]