操作方法
- 增 【+、${}、concat()】
- 删
- 改
- 查
增
+
模版字符串${}
concat()
语法:const newStr = str1.concat(arr2, arrr3)
返回新的字符串
,将一个
或多个
字符串与原字符串
连接合并。
// 写法
const str2 = str1.concat('hi')
删
这里的删并不是指删除原来的字符串,而是创建一个字符串的副本
,再进行操作。
常见的有:
- slice(start, end)
- substr(start, length) (以被标记废弃,不建议使用)
- substring()
slice()
提取字符串片段,并在新的字符串中返回被提取的部分。
substr()
从起始索引号提取字符串中指定数目的字符
substring()
提取字符串中两个指定的索引号之间的字符
方法 | 参数 | 返回值 |
---|---|---|
slice(start, end) | 支持反向索引; start>end时不支持参数交换返回空字符串; start : 起始索引(含) end : 结束索引(不含) | 从start 到end-1 的子字符串 |
substr(start, length) | start : 起始索引(含) length : 截取长度(第一个参数为负数时,从末尾倒数;第二个参数为负数时返回空字符串) | 从start 开始截取length 个字符 |
substring(start, end) | 不支持反向索引start : 起始索引(含) end : 结束索引(不含)(负数参数会被重置为0 (如substring(-2, 3) 转换为substring(0, 3) )) | 从start 到end-1 的子字符串 |
const str1 = '12345'
const str2 = str1.slice(2, 4) // '34'
const str3 = str1.slice(4, 2) // = str1.slice(2, 4) 参数交换
const str4 = str1.slice(-3, -1) // "34" 倒数第3到倒数第2
const str5 = str1.substring(-2, 3) // = str1.subsring(0, 3) '123'
改
trim()
、trimStart()
、trimEnd()
repeat()
- padStart()、padEnd()
- toLowerCase()、toUpperCase()
trim()、trimStart()、trimEnd()
删除前、后或前后所有空格符,再返回新的字符串
trim( ):删除字符串两边的空格
trimStart() 取出开始的空格
trimEnd() 去除末尾空格
repeat()
接收一个整数参数,表示要将字符串复制多少次,然后返回拼接所有副本后的结果。
const str = 'hi '
const copyStr = str.repeat(2) // 'hi hi '
padStart(targetLength, padString)、padEnd(targetLength, padString)
- padStart() 方法用于在当前字符串的
前面
填充指定的字符,直到字符串的长度达到指定的长度。 - padEnd() 方法用于在当前字符串的
后面
填充指定的字符,直到字符串的长度达到指定的长度。
接受两个参数:
targetLength
是填充后的结果字符串的长度。padString
是一个可选参数,用于填充字符串,此参数的默认值为" "。
toLowerCase()、toUpperCase()
大小写转换
查
除了通过索引的方式获取字符串的值,还可通过:
chatAt()
返回在指定位置的字符indexOf()
检索字符串,返回第一次出现的索引,没有出现则为-1startWith()
返回布尔值includes()
返回是否存在指定字符的布尔值
chatAt()
返回在指定位置的字符
indexOf()
检索字符串,返回第一次出现的索引,没有出现则为-1
startWith()、
includes(searchString,position )
从字符串中搜索传入的字符串,从postition索引开始搜寻,默认0,并返回一个表示是否包含的布尔值
const str = 'abcdc'
console.log(str.chatAt(2)) // 'c'
console.log(str.indexOf('c')) // 2
console.log(str.startWith('c')) // false
console.log(str.includes('c')) // true
转换方法
split()
返回一个以指定分隔符出现位置分隔而成的一个数组。
模版匹配方法
针对正则表达式,字符串设计了几个方法:
match()
search(regexp)
replace()
match()
接收一个参数,可以是一个正则表达式字符串,也可以是一个 RegExp 对象,返回数组
let text = "cat, bat, sat, fat";
let pattern = /.at/;
let matches = text.match(pattern);
console.log(matches[0]); // "cat"
search()
接收一个参数,可以是一个正则表达式字符串,也可以是一个 RegExp 对象,返回首次匹配到的索引,否 则返回 -1
let text = "cat, bat, sat, fat";
let pos = text.search(/at/);
console.log(pos); // 1
replace()
把指定的字符串替换成为别的字符,接收两个参数,第一个参数为匹配的内容,第二个参数为替换的元素(可用函数)
let text = "cat, bat, sat, fat";
let result = text.replace("at", "ond");
console.log(result); // "cond, bat, sat, fat"
其他方法
- lastIndexOf(searchValue[ fromIndex]) 返回从字符串尾部开始第一次出现的索引,没有则-1,fromIndex的值相对于从尾部开始的索引
- valueOf( ):返回某个字符串对象的原始值
- toString()返回一个表示调用对象的字符串,该方法返回指定对象的字符串形式
超长字符串
字符串属于基础类型,所以会觉得字符串是存在栈内存中的,但是要知道,V8默认栈内存是984Kib,那如果一个超长字符串 > 984Kib能装的进栈内存吗?
超长字符串的内容存于堆内存中,指针存于栈内存中,且相同的字符串指向同一个堆内存地址