《三》ES6中字符串的扩展

字符串的遍历器接口:

ES6为字符串添加了遍历器接口,使得字符串可以被for…of循环遍历。

for (let codePoint of 'foo') {
  console.log(codePoint)
}
// "f"
// "o"
// "o"

模板字符串:

模板字符串是增强版的字符串,用反引号标识。它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。如果模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。模板字符串中嵌入变量,需要将变量名写在${}之中,大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性,还能调用函数。

// 普通字符串
`In JavaScript '\n' is a line-feed.`

// 多行字符串
`In JavaScript this is
 not legal.`
 
// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

如果在模板字符串中还需要使用反引号,则前面要用反斜杠转义。

let greeting = `\`Yo\` World!`;

标签模板:

模板字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串,这被称为"标签模板"功能。

标签模板其实不是模板,而是函数调用的一种特殊形式。标签指的就是函数,紧跟在后面的模板字符串就是它的参数。函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分;函数的其他参数,都是模板字符串各个变量被替换后的值。

let name = 'Lee';
show `我是${name}!`;

function show(arr,name){
       console.log(arr);
       console.log(name);
}

在这里插入图片描述

实例方法:normalize():

ES6提供字符串实例的normalize()方法,用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。

'\u01D1'.normalize() === '\u004F\u030C'.normalize()
// true

实例方法:includes()、startsWith()、endsWith():

传统上,JavaScript只有indexOf()方法,可以用来确定一个字符串是否包含在另一个字符串中。

ES6又提供了三种新方法:

  1. includes():返回布尔值,表示是否找到了参数字符串。
  2. startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
  3. endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

这三个方法都支持第二个参数,表示开始搜索的位置。

let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

实例方法:repeat():

repeat()方法返回一个新字符串,表示将原字符串重复n次。

'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

参数如果是小数,会被向下取整。

'na'.repeat(2.9) // "nana"

如果repeat()的参数是负数或者infinity,会报错。

'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError

但是,如果参数是0到-1之间的小数,则等同于0,这是因为会先进行取整运算。0到-1之间的小数,取整以后等于-0,repeat视同为0。

'na'.repeat(-0.9) // ""

参数NaN,等同于0。

'na'.repeat(NaN) // ""

如果repeat()的参数是字符串,则会先转换成数字。

'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"

实例方法:padStart()、padEnd():

ES2017引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。这两个方法都接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。

'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'

如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。

'xxx'.padStart(2, 'ab') // 'xxx'

如果用来补全的字符串与原字符串,两者的长度之和超过最大长度,则会截去超出位数的补全字符串。

'abc'.padStart(10, '0123456789')
// '0123456abc'

如果省略第二个参数,默认使用空格补全长度。

'x'.padStart(4) // '   x'

实例方法:trimStart()、trimEnd():

ES2019对字符串实例新增了trimStart()和trimEnd()这两个方法。它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原字符串。

浏览器还部署了额外的两个方法,trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名。

除了空格键,这两个方法对字符串头部(或尾部)的tab键、换行符等不可见的空白符号也有效。

const s = '  abc  ';

s.trim() // "abc"
s.trimStart() // "abc  "
s.trimEnd() // "  abc"

实例方法:matchAll():

matchAll()方法返回一个正则表达式在当前字符串的所有匹配。

猜你喜欢

转载自blog.csdn.net/wsln_123456/article/details/106466784