一、变量的解构赋值
- 字符串的解构赋值
字符串解构赋值时,被转换成类似数组的对象,逐字符去赋值。类似数组的对象都有length属性,也可以对解构目标的length属性进行解构。比如let { length: len } = "aaaaa"
可以得到len = 5
,这里:
前是匹配的模式,:
后是接收的属性。 - 数值和布尔值解构赋值会先转换为对象。
- 函数的参数解构赋值时可以使用默认值。下面是书上的相关代码。
function move({ x=0, y=0 }= {}){
return [x,y]
}
move({x:3}); // [ 3, 0]
function mover({ x,y } = { x:0, y:0 }){
return [x,y]
}
move({x:3}) // [3,undefined]
move({}) // [undefined,undefined]
move() // [0,0]
第一种写法是为xy指定默认值,所以xy没有就是默认0;而第二种写法,是给move这个函数的参数指定默认值,如果往里面传了东西进去,那么它就不会去解构出x:0,y:0这个默认值了
- 圆括号尽量不使用,它只有在模式内或者整个语句才能用。比如
[ (www) ] = [3]
二、字符串
- 超过\u0000-\uFFFF的字符,可以在码点外加上大括号实现正确读取。否则会被理解为两个字符。例如\u20BB7被理解成\u20BB+7,而ES6:\u{20BB7}就可以实现正确读取
- includes()、startWith()、endWith()用来确定目标字符串内是否包含给定字符串。
let s = 'hello'
s.includes('el',2) //true
他们都可以携带第二个参数,表示开始搜索的位置(从n到尾),但是endWith不一样,他是前n个字符(反过来的从n到尾,就是把尾当成头的从n到尾。)
- repeat()将原字符串重复,向下取整,参数不支持负数和Infinity
'hello'.repeat(2.8) //'hellohello'
- padStart()、padEnd()补全字符串
'hello'.padStart(10,'a') //'helloaaaaa'
第二个参数可以省略,默认用空格补全。如果第一个参数比原来还小,就不改变。