当前位置:网站首页>字符串的新增方法
字符串的新增方法
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。
边栏推荐
猜你喜欢

Distributed transaction processing solution big PK!

实验7 UDP与TCP对比

Sword Point Offer Special Assault Edition ---- Day 1

有了MVC,为什么还要DDD?

剑指offer基础版--- 第23天

About the problems encountered by Xiaobai installing nodejs (npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)

面试官问我TCP三次握手和四次挥手,我真的是

Redis 事务学习有感

Mysql——字符串函数

MYSQL下载及安装完整教程
随机推荐
torch.normal function usage
关于superset集成到自己的项目中
限流的原理
Simple command of mysql
The TOKEN value of Kubernetes joining the cluster expires
torch.normal函数用法
Typec手机有线网卡网线转网口转接口快充方案
Paginate the list collection and display the data on the page
tf.keras.utils.get_file()
实验8 DNS解析
Shell重油常压塔模拟仿真与控制
TOGAF之架构标准规范(一)
matlab simulink欠驱动水面船舶航迹自抗扰控制研究
【C语言3个基本结构详解——顺序、选择、循环】
mysql5.7.35安装配置教程【超级详细安装教程】
联盟链的真实场景在哪里
Quickly master concurrent programming --- the basics
MySQL-Explain详解
Lock wait timeout exceeded解决方案
再见了繁琐的Excel,掌握数据分析处理技术就靠它了