字符串可以调用方法吗?
字符串之所以能调用方法本质是 javastring 内部做了一些处理。具体表现来说,从内存去读取变量保存的值,发现是 string 类型时。javascript 内部会创建一个 String 类型的实例,若调用了方法,他会去在这个 string 实例上查找(没找到继续在原型上查找),有就调用,反之就抛出错误,最后销毁这个 string 实例.
// 书写的代码
const s1 = 'WFattTiger'
const s2 = s1.substring(0,1)
// 内部执行的过程
const s1= 'WFattTiger'
const storage =new String('WFattTiger') // 从内存中读取到 WFattTiger ,然后创建实例
const s2 = storage.substring(0,1) // 调用实例上的方法
storage = null // 销毁实例
注:这也就是为啥string、number 和 boolean 这些原始类型也可以拥有对象能力的原因
string常用属性和方法
length | 一个属性,表示字符串中字符的数量 |
charAt | 一个方法,接收一个参数,返回参数指定索引位置的字符 注:charCodeAt, fromCharCode, codePointAt,normalize |
concat | 一个方法,接收任意个参数,返回一个由多个参数拼接成字符串 |
slice | 一个方法,可传递1到2个参数(第一个参数表示子字符串开始位置,第二个表示子字符串结束到位置),返回一个子字符串。如果是参数是负数的话,表示字符串长度加上负数的值的位置 注1: substr 方法第二个参数是指子字符串长度。如果第二个参数为负数的话,会转换成0 注2: substring不管是第一参数,还是第二参数如果是负数都转换成0 |
indexOf | 一个方法,可传递1到2个参数(第一个参数表示要搜索的字符串,第二个表示搜索的开始位置),返回索引下标值,未找到返回-1。 注:lastIndexOf方法 是从字符串末尾开始搜索 |
includes | 一个方法,可传递1到2个参数(第一个参数表示要搜索的字符串,第二个表示搜索的开始位置),返回布尔值,存在则为true,反之为false 注:startsWith从头部开始搜索,如果第一个字符不匹配的话则也为false。同理,endsWith从尾部开始搜索 |
trim | 一个方法,不接收参数。返回一个删除前后空格的副本字符串。 注:trimLeft,trimRight两个方法分别是只删除开始或者末尾空格 |
repeat | 一个方法,接收1个整数参数。表示要将字符串复制多少次,然后返回拼接所有副本后的结果。 |
padStart | 一个方法,可以接收1到2个参数(第一个参数是指返回的字符串长度,第二个参数是指填充的字符串空)。返回一个填充好的字符串 注1:如果第一个参数小于字符串的长度,返回的是字符串本身的副本。 注2:第二个参数不传,默认为空 注3:padEnd方法是从尾部开始填充 |
replace | 一个方法,接收2个参数(第一个参数可以是字符串或者RegExp,第二个参数可以是字符串或者方法),将第二个参数替换掉第一个参数。 注:如果要全局都替换掉,那第一个参数必须是RegExp,并且带全局标识 |
split | 一个方法,接收1到2个参数(第一个参数可以是字符串或者RegExp,第二个表示返回值数组的长度),通过第一个进行分割成一个数组并返回。 |
toLocaleUpperCase | 一个方法,不接收参数,将字符转换成大写。 注1:toUpperCase方法也是将文字符转换成大写。 注2:toLocaleLowerCase和toLowerCase,将文字符转换成小写。 注3:尽量使用toLocaleLowerCase,toLocaleUpperCase这两方法 |
match | 一个方法,接收一个参数(可以是字符串,可以是RegExp),返回一个可迭代的伪数组。数组中index表示匹配参数的索引下标,第一项是匹配的值 注:search方法返回的是匹配参数的索引下标值 |
localeCompare | 一个方法,接收一个参数,比较参数和字符串顺序(字母表排序),字符串排在参数后面为1,相等为0,反之为-1 |
注1:因为string本质会创建string对象,所以也可以使用object原型上的toString,valueOf,toLocaleString三个方法。
注2:字符串的原型也暴露了迭代(@@iterator)方法,所以也可以使用 forof 进行遍历,...语法进行解构