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

  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) // true
s.endsWith('Hello', 5) // true
s.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 is
not legal.`

console.log(`string text line 1
string text line 2`);

//字符串中嵌入变量
var name = 'Bob', time = 'today';
`Hello ${name},how are you ${time}`

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值