当前位置:网站首页>字符串的新增方法
字符串的新增方法
2022-07-31 05:10:00 【F班的小夏同学】
String.raw()
该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杆)的字符串,往往用于模板字符串的处理方法。
String.raw`Hi\n${
2+3}!`
// 实际返回 "Hi\\n5!",显示的是转义后的结果 "Hi\n5!"
String.raw`Hi\u000A!`;
// 实际返回 "Hi\\u000A!",显示的是转义后的结果 "Hi\u000A!"
如果原字符串的斜杠已经转义,那么String.raw()会进行再次转义。
String.raw`Hi\\n`
// 返回 "Hi\\\\n"
String.raw`Hi\\n` === "Hi\\\\n" // true
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个位置直到字符串结束。
repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次。
'x'.repeat(3) // "xxx"
'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,repeate视同为0。
'na'.repeat(-0.9) // ""
参数NaN等同于0。
'na'.repeat(NaN) // ""
如果repeate的参数是字符串 ,则会先转换成数字。
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"
padStart(),padEnd()
ES2017引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
上面代码中,padStart()和padEnd()一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'
如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
'abc'.padStart(10, '0123456789')
// '0123456abc'
如果省略第二个参数,默认使用空格补全长度。
'x'.padStart(4) // ' x'
'x'.padEnd(4) // 'x '
padStart()的常见用途是为数值补全指定位数。下面代码生成10位的数值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
另一个用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
trimStart()、trimEnd()
这两个方法的行为和trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。他们返回的都是新字符串,不会修改原始字符串。
const s = ' abc ';
s.trim() // "abc"
s.trimStart() // "abc "
s.trimEnd() // " abc"
上面的代码中,trimStart()只消除头部的空格,保留尾部的空格。trimEnd()也是类似行为。
除了空格键,这两个方法对字符串头部(或尾部)的tab键、换行符等不可见的空白符号也有效。
浏览器还部署了额外的两个方法,trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名。
replaceAll()
历史上,字符串的实例方法replace()只能替换第一个匹配。
'aabbcc'.replace('b', '_')
// 'aa_bcc'
上面例子中,replace()只将第一个b替换成了下划线。
如果要替换所有的匹配,不得不使用正则表达式的g修饰符。
'aabbcc'.replace(/b/g, '_')
// 'aa__cc'
正则表达式毕竟不是那么方便和直观,ES2021引入了replaceAll()方法,可以一次性替换所有的匹配。
'aabbcc'.replaceAll('b', '_')
// 'aa__cc'
注意:这一部分和java中replace()与replaceAll()的用法不一样。
在java中:replace()和replaceAll()都是替换字符串中所有符合条件的字符串的,但是replace()不支持正则匹配,只支持字符串替换,replaceAll()同时支持字符串替换和正则匹配。如果想要只替换第一个符合条件的,java中使用replaceFirst()方法正则匹配。
在javascript中:replace()在使用字符串替换的时候只会替换掉第一个匹配字符串,要想替换掉所有的,需要使用正则匹配,而replaceAll()同时支持字符串替换和正则匹配全部替换。
String.prototype.replaceAll(searchValue, replacement)
需要注意的是,searchValue是搜索模式,可以是一个字符串,也可以是一个全局的正则表达式(带有g修饰符)!!!必须是带g修饰符的,如果searchValue是一个不带有g修饰符的正则表达式,replaceAll()会报错,这和replace()不同。replaceAll()的第二个参数replacement除了为字符串,也可以是一个函数,该函数的返回值将替换掉第一个参数searchValue匹配的文本。
'aabbcc'.replaceAll('b', () => '_')
// 'aa__cc'
at()
at()方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置。)
const str = 'hello';
str.at(1) // "e"
str.at(-1) // "o"
如果参数结果位置超出了字符串范围,at()返回undefined。
边栏推荐
- 分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ
- Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
- docker安装postgresSQL和设置自定义数据目录
- mysql 的简单运用命令
- uni-app进阶之生命周期【day8】
- C语言实验三 选择结构程序设计
- 剑指offer基础版 ----- 第28天
- 对list集合进行分页,并将数据显示在页面中
- 精解四大集合框架:List 核心知识总结
- 账号或密码多次输入错误,进行账号封禁
猜你喜欢

Typec手机有线网卡网线转网口转接口快充方案

分布式事务处理方案大 PK!
【一起学Rust】Rust学习前准备——注释和格式化输出
uni-app进阶之内嵌应用【day14】

第7章 网络层第3次练习题答案(第三版)

【MySQL8入门到精通】基础篇- Linux系统静默安装MySQL,跨版本升级

The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays

基于flask的三方登陆的流程

Interviewer: If the order is not paid within 30 minutes, it will be automatically canceled. How to do this?

关于小白安装nodejs遇到的问题(npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
随机推荐
面试官,不要再问我三次握手和四次挥手
精解四大集合框架:List 核心知识总结
Interviewer, don't ask me to shake hands three times and wave four times again
太厉害了,终于有人能把文件上传漏洞讲的明明白白了
1D, 2D, 3D convolution operations in pytorch
Flask 的初识
Data set partitioning and cross-validation
剑指offer专项突击版 ---- 第1天
基于flask的三方登陆的流程
C语言教程(一)-准备
剑指offer基础版 ----第31天
【一起学Rust】Rust学习前准备——注释和格式化输出
MYSQL一站式学习,看完即学完
数据库上机实验2 单表查询和嵌套查询
Paginate the list collection and display the data on the page
实验8 DNS解析
Redis的初识
Interviewer: If the order is not paid within 30 minutes, it will be automatically canceled. How to do this?
pytorch中的一维、二维、三维卷积操作
Flink sink redis writes to Redis