一、字符串模板
当我们需要拼接字符串时,往往会遇到一些不便,比如变量太多,+用的太多导致自己都看不清哪些内容,代码长还不清晰,换行需要加转义字符等等。
旧语法:
var name = "张三";
var year = "1995";
var month = "6";
console.log(name+'是'+year+"年"+month+'月份\n出生的')
es6的字符串模板:
var name = "张三";
var year = "1995";
var month = "6";
console.log(`${name}是${year}年${month}月份
出生的`)
字符串模板语法:
`${表达式}字符串`
console.log(`${true?`今天`:`明天`}\n出去`);
\\变量名也是一种表达式
在字符串模板中,字符串可以直接换行,可以使用转义字符,字符串模板可以嵌套使用。
二、解构
解构赋值是一种结构化赋值,主要用途是为了简化书写的长度,提升效率。
解构赋值表达式的值与表达式右侧(也就是=右侧)的值相等,如此一来,在任何可以使用值的地方都可以使用解构赋值表达式
对象的解构赋值:
//例:
let obj = {
name : "jack",
age : 18,
sex : "nan",
class : 10
}
//方法一:
let name,age;
({name,age} = obj);
console.log(name,age) //jack 18
//方法二:
let {name , age} = obj;
console.log(name,age); //jack 18
//方法三:
let {name : oName,age : oAge, sex:oSex} = obj;
console.log(oName,oAge,oSex) //jack 18 nan
数组的解构赋值:
例:
let arr = [1,2,3,4,10];
//方法一:
let [a,b,c,d] = arr;
console.log(a,b,c,d) //1 2 3 4
//方法二:
let {length} = arr; //获取arr数组的长度
console.log(length) //5
当数组中包含对象时:
let arr = [1,2,3,{name:'jack'}];
let {0:a,1:b,2:c,3:{name:oName}} = arr;
console.log(a,b,c,oName) //1 2 3 "jack"
使用解构赋值表达式时,如果指定的局部变量名称在对象中不存在,那么这个局部变量会被赋值为undefined
let node = {
type: "Identifier",
name: "foo"
};
let { type, name, value } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
console.log(value); // undefined
这段代码额外定义了一个局部变量value,然后尝试为它赋值,然而在node对象上,没有对应名称的属性值,所以像预期中的那样将它赋值为undefined
当指定的属性不存在时,可以随意定义一个默认值,在属性名称后添加一个等号(=)和相应的默认值即可
let node = {
type: "Identifier",
name: "foo"
};
let { type, name, value = true } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
console.log(value); // true
在此示例中,为变量value设置了默认值true,只有当node上没有该属性或者该属性值为undefined时该值才生效。此处没有node.value属性,因为value使用了预设的默认值