字符串新增方法

1,String.fromCodePoint()

Es6 提供了 String.fromCodePoint() 方法,可以识别大于 0xFFFF 的字符,补充了 String.fromCharCode() 方法的不足。

String.fromCodePoint(0x20BB7)
// '告'
String.fromCodePoint(0x78,0x1f680,0x79) === 'x\uD83D\uDE80y'
// true

如果 String.fromCodePoint() 有多个参数,则会合成一个字符串返回。

注意:fromCodePoint() 方法定义在 String 对象上,而 codePointAt() 方法定义在字符串实例对象上。

2,String.raw()

Es6 还为原生的 String 对象听哦你了 raw 方法。该方法返回一个斜杆都被转义(即斜杠前面再加一个斜杠)的字符串。往往用于模板字符串的处理方法。

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

如果原字符串的已经转义,那么 String.raw() 会再次进行转义。

String.raw'Hi\\n'
// 返回 "Hi\\\\n"

String.raw() 方法可以作为处理模板字符串的基本方法,它会将素有变量替换,而且对斜杠进行转义,方便下一步作为字符串来使用。

3,codePointAt()

JavaScript 内部,字符以 UTF-16 的格式存储,每个字符固定为 2 个字节。对于那些需要 4 个字节存储的字符(Unicode 码点大于 0xFFFF 的字符),JavaScript 会认为它们是两个字符。

4,normalize()

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

'\u01D1'.normalize() === '\u004f\u030c'.normalize()
// true

5,includes() startsWith() endsWith()

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

includes():返回布尔值,表示是否找到了参数字符串

startsWith():返回布尔值,表示参数字符串是否在原字符串的头部

endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部

let str = '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

从上面我们可以看出来,使用第二个参数的时候,endsWith 的行为与其他两个方法有所不同,它针对前 n 个字符,而其他两个方法,针对从第 n 个位置知道字符串结束。

6,repeat()

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

'x'.repeat(3) // "xxx"
'haha'.repeat(0) // "" (空字符串。)

如果是小数,则会取整。

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

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

'str'.repeat(Infinity)
// RangeError
'str'.repeat(-1)
// RangError

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

参数 NaN 等同于 0。

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

'str'.repeat('nan'); // ""
'str'.repeat('3'); // "nanana"

7,padStart() padEnd()

Es2017 引入了字符串补全长度的功能,如果某个字符串不够指定长度,会在头部或尾部补全。padStart() 用于头部补全,padEnd() 用于尾部补全。

'x'.padStart(5, 'st') // 'ststx'
'x'.padStart(4, 'st') // 'stsx'

padStart() 和 padEnd() 一共接受两个参数,第一是字符串补全生效的最大长度,第二个参数是用来补全的字符串。

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

'xxx'.padStart(2,'s'); // 'xxx'

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

'abc'.padStart(10,'123456789');
// '1234567abc'

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

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

padStart() 的常用用途是为数值补全指定位数。下面代码生成 10 位数值字符串。

'1'.padStart(10, '0')  // 0000000001
'12'.padStart(10, '0') // 0000000012

另一个用途是提示字符串格式。

'12'.padStart(10, 'YYYY-MM-DD') // YYYY-MM-12
'09-12'.padStart(10, 'YYYY-MM-DD') // YYYY-09-12

8,trimStart() trimEnd()

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

const s = ' str ';
s.trim() // 'str'
s.trimStart() // 'str '
s.trimEnd() // ' str'

9,matchAll()

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容