ES6笔记
1.字符串的几个新增方法
字符串匹配:在es6之前,js中只有indexof方法可以用来确定一个字符串是否包含在另一个字符串中,在es6中又提供了三种新方法:
- includes():返回布尔值,表示是否找到了要查找的参数字符串
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
字符串重复:repeat()方法,会将原字符串重复 n 次,如
'ha'.repeat(3) //"hahaha" 'x'.repeat(5) //"xxxxx"
方法内的参数如果是小数,会自动取整,如:
'ha'.repeat(3.5) //"hahaha"
参数不能是负数或者无穷大Infinity,会报错。值得注意的是,0到-1之间的小数等同于0;NaN也等同于0;参数是字符串,则会先转换为数字;返回的是一个新字符串不会改动原本字符串。
字符串补全:padStart()与padEnd()方法,如果某个字符串不够长度,会在头部或尾部补全。
'x'.padStart(5, 'ab') // 'ababx' 'x'.padStart(4, 'ab') // 'abax' 'x'.padEnd(5, 'ab') // 'xabab' 'x'.padEnd(4, 'ab') // 'xaba'
可接收两个参数,第一个参数是字符串补全后的长度,第二个参数是用来补全的字符串。如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。
'xxx'.padStart(2, 'ab') // 'xxx' 'xxx'.padEnd(2, 'ab') // 'xxx'
如果用来补全的字符串和原字符串两者相拼的长度超过了第一个参数即最大长度,则会截去超出位数的补全字符串
'ab'.padStart(8, '123456789') //123456ab
如果省略第二个用来补全的字符串参数,默认使用空格补全长度。
字符串中空格的去除:扩展了trim()方法,trimStart()和trimEnd()方法,分别用来消除字符串头部或尾部的空格,返回的是新字符串,不会改变原始的字符串。
const test = ' abc '; test.trim() // "abc" test.trimStart() // "abc " test.trimEnd() // " abc"
另外,这两个方法对头部或尾部的tab键、换行符等不可见空白符号也有效。
字符串替换:之前的replace()只能替换掉第一个匹配到的,新的方法replaceAll()可以一次性替换所有匹配。
'aabbccbb'.replaceAll('b', 'f') // 'aaffccff'
返回的是新字符串不会改变原本字符串
2.函数参数的默认值
ES6允许为函数设置默认值,直接写在参数定义的后面。如:
function test(x, y = 'World') { console.log(x, y); } test('Hello') // Hello World test('Hello', 'China') // Hello China test('Hello', ' ') // Hello
设置默认值的参数是可以省略的,另外,参数变量是默认声明的,所以不能用let或const再次声明,否则会报错。
3.解构
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)
数组解构:
let [a,b] = [1,2];
a //1
b //2
上面代码表示,可以从数组中提取值,按照对应位置,对变量进行赋值。这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
let [a, ,c] = [ 1,2,3] a //1 c //3 let [ , , c] = [1,2,3] c //3 let [a,[b,c]]=[1,[2,3]] a //1 b //2 c //3
如果解构不成功,变量的值就等于undefined。
let [a] = [] a //undedined let [a,b] = [1] b //undedined
另外不完全解构,即等号左边的模式,只匹配等号右边一部分的数组。
let [a,b] = [1,2,3,4,5] a //1 b //2
解构赋值允许指定默认值,如果左边对应右边的值为undefined就会取默认值。
let [a = true] = [] a //true
let [a,b = true] = [1,undefined]
a //1
b //true
对象解构:
let { foo,bar } = { foo:'aaa' , bar:'bbb' }
foo //aaa
bar //bbb
对象的解构,属性不需要次序,变量必须与对象的属性同名才能取到正确的值,即上述例子写成 let { bar , foo } = ......同样可以。而数组的解构,是按照次序排列的,变量的取值由它的位置决定。
如果变量没有对应属性名,导致取不到值,即解构失败会等于undefined,
let {foo} = { bar:'bbb' }
foo //undefined
如果不想将属性名当做变量名称,即将属性名赋值给新的变量名,如:
let { foo : a} = {foo:'aaa' , bar:'bbb'}
a //aaa
let { foo : a,bar : b} = {foo:'aaa' , bar:'bbb'}
a //aaa
b //bbb

浙公网安备 33010602011771号