ES6 学习笔记之《字符串的扩展》

来源:互联网 发布:犀牛社淘宝论坛 编辑:程序博客网 时间:2024/05/30 13:41
  1. for-of
    ES6为字符串添加了遍历器接口,使得字符串可以被for-of循环遍历。
for(let i of 'foo'){    console.log(i)}//'f'//'o'//'o'

但是其实这种需求用for循环也是可以实现的

var x = 'foo';for(let i =0;i<x.length;i++){  console.log(x[i]);}

如果完全一样,那么ES6也不会推出这个接口,那么两者的差别在哪呢?

for-of遍历器的优点在于可以识别大于0xFFFF的码点,而传统的ofr循环时无法识别这样的码点的。

var text = String.fromCodePoint(0x20BB7);for(let i = 0;i<text.length;i++){  console.log(text[i]);}//' '//' 'for(let i of text){  console.log(i);}//"��"

上面代码中,字符串text只有一个字符,但是for循环会认为它包含两个字符(都不可打印),而for-of循环会正确识别出一个字符。

  1. at()
    ES5为字符串对象提供了charAt方法,返回字符串给定位置的字符。
    ES6推出了at方法,也是返回字符串给定位置的字符。
    两者的区别在于,at方法可以识别大于0xFFFF的字符编码,返回正确的字符。而charAt仅仅是返回字符编码的第一个字节,实际上是无法显示的。
'��'.charAt(0);    //'' 这里显示不出来的,是第一个字节编码'��'.at(0);        //'��'

3.includes(),startWith(),endsWith()
传统上,javaScript只有indexOf方法,可以用来确定一个字符串中是否包含在另一个字符串中。
ES6现在又提供了三种新方法。
- includes():返回布尔值,表示是否找到了参数字符串。
- startWith():返回布尔值,表示参数字符串是否在源字符串的头部。
- endsWith() : 返回布尔值,表示参数字符串是否在源字符串的尾部。

var s = 'Hello world!';s.includes('l');s.startsWith('H');s.endsWith('!');

这三个方法还支持第二个参数,表示开始检索的位置。
但是需要注意的是,endsWith()的第二个参数,是表示字符串的前n个字符,而不是其他两个方法所指的从第n个字符开始检索。

var s = 'Hello world!';s.startsWith('world', 6) // trues.endsWith('Hello', 5) // trues.includes('Hello', 6) // false

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

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

参数如果是小数的话,会被向靠近于0的方向取整。也就是说当参数为-1~0的时候,参数取整为0。

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

如果参数是负数或者Infinity的时候,会报错。

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

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

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

5.padStart(),padEnd()
ES7推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。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'

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

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

如果省略了第二个参数,那么就会用空格来补全长度。

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

6.模板字符串
传统的JavaScript语言,输出模板是这样的:

$('#result').append(  'There are <b>' + basket.count + '</b> ' +  'items in your basket, ' +  '<em>' + basket.onSale +  '</em> are on sale!');

上面这种写法比较繁琐,所以ES6引入了模板字符串来解决这个问题。

$('#result').append(`  There are <b>${basket.count}</b> items   in your basket, <em>${basket.onSale}</em>  are on sale!`);

模板字符串是增强版字符串,用反引号(`)来标识。它可以当普通字符串来使用,也可以定义多行字符串,或者在字符串中嵌入变量。

//普通字符串`In JavaScript '\n' is a line-feed.`//多行字符串`In JavaScript this isnot legal.`console.log(`string text line 1string text line 2`);//字符串中嵌入变量var name = 'Bob', time = 'today';`Hello ${name},how are you ${time}`

模板字符串中嵌入变量的时候,需要将变量名写在${}之中。

0 0