String常用方法

104 阅读4分钟

String

let str1 = 'aaa'
let str2 = new String('bbb')
let String(true) = 'true' // 将任意类型转化为字符串

typeof(str1) // string
typeof(str2) // object
str2.valueOf() // 'bbb'

// 使用new关键字来创建字符串时,会生成一个类数组对象{0: 'b', 1: 'b', 2: 'b', length: 3}
// 使用数组方法`slice()`可以使类数组转化为数组,也可以使用`join()`转化为字符串。

静态方法

String.fromCharCode()

  • 方法的参数是一个或者多个数值,代表Unicode码点,返回值是这些码点组成的字符串。
String.fromCharCode() // ''
String.fromCharCode(97) // 'a'
String.fromCharCode(104, 101, 108, 111) // 'hello'

// 方法不支持Unicode码点大于0xFFFF的字符,返回值会乱码,也就是参数得小于0xFFFF(十进制的65535)
// 原因是JavaString默认支持两个字符。过大的数可以通过拆分成小于或等于两个字符的方式展示。

// 例如:"𠮷"(0x20BB7)可以拆分成如下:
String.fromCharCode(0xD842, 0xDFB7) // "𠮷"

实例属性

  • length返回字符串长度。

实例方法

charAt()

  • charAt返回指定位置的字符串,参数是从0开始编号的位置。
'abc'.charAt(1) // 'b'
// 这个方法可以用数组下标代替
'abc'[1] // 'b'

// 如果参数为负数,或者大于等于字符串长度就会返回空字符串

charCodeAt()

  • 返回指定字符串的Unicode码点(十进制展示),相当于fromCharCode()逆向操作。
// 不填参数默认返回第一个字符
'abc'.charCodeAt(1) // 98
'abc'.charCodeAt(-1) // NaN
'abc'.charCodeAt(NaN) // NaN

// 默认也是只返回俩个字符的码点,如果超过65536(0xFFFF)四个字符就是必须连续使用两次
charCodeAt(i) charCodeAt(i + 1)

concat()

  • 连接两个字符串,返回一个新字符串,不改变原字符串。
s1 = 'a'
s2 = 'b'

s1.concat(s2) // 'ab'
s1.concat('b', 'c') 'abc'

// 如果参数类型不是字符串时,会先进行类型的转换。
''.concat(1, 2, 'a') // '12a'
与 + 运算符的区别是不会将类型一样的数值进行计算。

slice()

  • slice用于从原数组取出字符串并返回,不改变原字符。
slice(start, end) // 不包含end
// 只有start参数时会一直取到字符串的最后一个

// 如果时负值就从后开始提取。
javaString.slice(0, -6) // java

// 如果参数都是正数并且第一个参数大于第二个参数时会返回空字符串。

substring()

  • substringslice功能一致,都是用于提取字符串片段,不改变原字符串。
// 与slice() 区别
// 1. 如果第一个参数大于第二个参数时,会自动调换两个参数的位置。
'abc'.substring(1, 2) // 'b'
'abc'.substring(2, 1) // 'b'

// 2. 如果参数是负数时,会自动将负数转化为0。
'abc'.substring(-1) // 'abc'
'abc'.substring(0) // 'abc'

substr()

  • 提取字符串
// 与slice(), substring()区别
// 如果第一个参数时负数,表示从尾部开始计算位置。如果第二个参数是负数时,将会自动转换为0,因此会返回空字符串。

'abc'.substr(1, -2) // ''

indexOf(), lastIndexOf()

  • 功能一致,都是用于查找字符在字符串的位置,如果找到返回index,没有找到返回 -1。
两个参数,第一个代表需要查找的字符,第二个参数是设置开始查找的位置。
'abcc'.indexOf('b', 0) // 1

trim()

  • 去除字符串首尾空格。
' abc '.trim() // 'abc'

// trim不仅可以去除空格,还可以去除 制表符\t \v, 换行符\n, 回车符\r。
'\r\nabc \t'.trim() // 'abc'

toLowerCase(), toUpperCase()

  • 字符串大小写转化。

match()

  • 用于确定原字符串是否匹配莫格子字符串,返回数组,元素是找到的第一个字符串。如果没有找到,返回null。
'abc'.match('a') // ['a']
'abc'.match('x') // null

// 返回的数组还有index和input属性。
arr = 'abc'.match('bc') // 'bc'
arr.index // 1
arr.input // 'abc'

// 参数还可以是正则表达式

search(), replace()

  • search方法和match用法一样,返回值是匹配的第一个位置,没有找到返回 -1。
  • replace 用于替换匹配的字符,一般只能替换第一个匹配的。但是如果是带有g的正则表达式就可以全替换。
'aaa'.replace('a', 'b') //'baa'
'aaa'.replace(/a/g, 'b') // 'bbb'

split()

  • 按照参数分割字符串,返回分割好的字符串组成的数组。
'abc'.split('') // ['a', 'b', 'c']
'abc'.split('b') // ['a', 'c']
'abc'.split() // ['abc']
'abbc'.split('b') // ['a', '', 'c']
'abac'.split('a') // [ '', 'b', 'c']
'acbc'.split('c') // [ 'a', 'b', '']

// 第二个参数,用来规定返回数组的长度。
'abc'.split('', 0) // []

// 还可以接正则表达式
'abc'.split(/b/) // ['a', 'c']

localeCompare()

  • 用来比较两个字符串。返回整数,小于0表示第一个字符串小于第二个字符串,等于0表示两个字符串相等,大于0表示第一个字符串大于第二个字符串。
'abc'.localeCompare('def') // -1

// localeCompare()会按自然与言来排序
'B' > 'a' // false 'B' = 66, 'a' = 97
'B'.localeCompare('a') // 1

// 还可以接第二个参数,用来规定用哪种语言来比较。
'ä'.localeCompare('z', 'de') // -1
'ä'.localeCompare('z', 'sv') // 1