模板字符串:
用` `来表示模板字符串,${ }可以接收变量,可以操作变量,也可以接收函数的返回值
const name = "李斯"
const age = 18
const address = "深圳市"
// 模板字符串实现拼接
const message = `我叫${name},年龄${age},住在${address}`
console.log('message: ', message);
// 模板字符串内也可进行数据操作
const doubleAge = `两倍年龄是${age*2}`
console.log('doubleAge: ', doubleAge);
// 也可以接收函数的返回值
function getDoubleAge(age){
return age*2
}
const fDoubleAge = `${getDoubleAge(age)}这是双倍的两年`
console.log('fDoubleAge: ', fDoubleAge);
在JQuery中,常用append添加很长的字符串,内部还有变量,常规来说字符串换行需要前后都加双引号并用加号连接才能换行,用模板字符串就会方便很多。
模板字符串还有个冷门调用函数的用法,第一个参数为以${}为分割点组成的数组,后面参数为${}的内容,了解即可
函数的剩余参数
箭头函数
箭头函数没有显式原型,不能作为构造函数,不能用call什么的绑定this,会拿取上级作用域的this
展开运算符
const arr = [111,222,333]
const str = "why"
// 函数传参的时候使用
function foo(x,y,z){
console.log(x,y,z);
}
foo(...arr) //111 222 333
foo(...str) //w h y
// 构造数组时
const newArr = [...arr,...str]
console.log('newArr: ', newArr); //[111,222,333,"w","h","y"]
// 构造对象时,为浅拷贝,修改深层属性会影响到原对象
const obj = {name:"李斯",age:18,friend:{name:"张三",age:43}}
const newObj = {...obj,address:"深圳市"}
newObj.friend.name = "王五"
// 此时两者的friend.name都变为王五了
console.log('obj: ', obj);
console.log('newObj: ', newObj);
Symbol的用法
Symbol一般来说是作为独一无二标识使用的,可以作为对象的唯一属性名,在前面模拟call,apply的方法中,为了防止定义的属性名重复,就可以使用Symbol优化
const n1 = Symbol()
const n2 = Symbol()
console.log(n1 === n2); //false
// ES10之后能加入描述,也能通过description获取
const n3 = Symbol("这是n3的描述")
console.log(n3.description); //这是n3的描述
// 用Symbol可以作为对象的key
const obj = {
name:"李斯",
[n1]:"这是n1",
[n2]:"这是n2"
}
obj[n3]="这是n3"
console.log('obj: ', obj);
console.log(obj[n1],obj[n2],obj[n3]); //查询
// Symbol作为属性名,在遍历/Object.keys()等是获取不到属性名的
console.log(Object.keys(obj)); //["name"]
console.log(Object.getOwnPropertySymbols(obj)); //这个方法就可以获取到(只获取Symbol的)
// Symbol也可以不是独一无二的(了解即可)
const t1 = Symbol.for("key1")
const t2 = Symbol.for("key1")
console.log(t1===t2); //此时key相等,所以Symbol相等为true
const k1 = Symbol.keyFor(t1)
console.log('k1: ', k1); //可以获取Symbol的key