ES6学习-字符串的新增方法

说明:本文参考阮一峰的ECMAScript 6 入门

ES6字符串新增的几个方法

1.String.fromCodePoint()

ES5提供的String.fromCharCode()方法,用于从Unicode码点返回对应的字符,但是这个字符不能正确识别码点大于0xFFFF的字符。

String.fromCharCode(0x20BB7)
//"ஷ"

上面代码中,由于码点0x20BB7大于码点0xFFFF,String.fromCharCode()会舍弃最高位2,最后返回的是u+0BB7对应的字符,而不是想要的码点0x20BB7对应的字符。

2.String.raw()

ES6为String对象,提供了一个raw()方法。该方法返回一个斜杠都被转义(即斜杠前再加一个斜杠)的字符串,常用于模板字符串的处理方法。

String.raw`Hi\n${2+3}!`;
// 返回 "Hi\\n5!"

String.raw`Hi\u000A!`;
// 返回 "Hi\\u000A!"

3.实例方法codePointAt()

与String.fromCharCode()方法类似,String.charCodeAt()也不能正确处理Unicode 码点大于0xFFFF的字符。

var s = "?";

s.length // 2
s.charAt(0) // ''
s.charAt(1) // ''
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271

ES6提供了codePointAt()方法,能够正确处理Unicode 码点大于0xFFFF的字符,返回一个字符的码点。

let s = '?a';

s.codePointAt(0) // 134071
s.codePointAt(1) // 57271

s.codePointAt(2) // 97

codePointAt()方法的参数,是字符在字符串中的位置(从 0 开始)。上面代码中,JavaScript 将“?a”视为三个字符,codePointAt 方法在第一个字符上,正确地识别了“?”,返回了它的十进制码点 134071(即十六进制的20BB7)。在第二个字符(即“?”的后两个字节)和第三个字符“a”上,codePointAt()方法的结果与charCodeAt()方法相同。

codePointAt()方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString()方法转换一下。

let s = '?a';

s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"

4.实例方法:includes(),startsWith(),endsWith()

传统上,JavaScript只有indexOf()方法,可以确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。

  • includes(): 返回布尔值。表示参数字符串是否在原字符串里面。
  • startsWith(): 返回布尔值。表示参数字符串是否在原字符串头部。
  • 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

上面代码表示,使用第二个参数n时,endsWith()与其他两个方法不同,它是针对前n个字符。而其他两个方法针对从第n个位置开始直到字符串结束。

5.实例方法:repeat()

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

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

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

`na`.repeat(1.99) //"na"

如果参数时infinity或-1,会报错

`na`.repeat(Infinity) //range error
`na`.repeat(-1) //range error

但是参数如果是0到-1之间的小数,会被取整为0。

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

参数为NaN等同于0。

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

如果参数为字符串,则先转换为数字。

`na`.repeat("na) //""
`na`.repeat("2) //"nana"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值