javascript字符串常用的方法有哪些?

17 阅读4分钟

操作方法

  • 增 【+、${}、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: 结束索引(不含)startend-1的子字符串
substr(start, length)start: 起始索引(含) length: 截取长度(第一个参数为负数时,从末尾倒数;第二个参数为负数时返回空字符串)start开始截取length个字符
substring(start, end)不支持反向索引start: 起始索引(含) end: 结束索引(不含)(负数参数会被重置为0(如substring(-2, 3)转换为substring(0, 3)))startend-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() 检索字符串,返回第一次出现的索引,没有出现则为-1
  • startWith() 返回布尔值
  • 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能装的进栈内存吗?

超长字符串的内容存于堆内存中,指针存于栈内存中,且相同的字符串指向同一个堆内存地址