我们经常都会使用到字符串,当我们将一个字符串赋值给一个变量的时候,我们就定义了一个字符串类型值。字符串类型属于基本类型,不是引用类型,因为变量存的的是值,而不是指针,这个值是存放在栈中的,而引用类型的值都存放在堆中的。
比如我们定义一个字符串类型的值:
var str = 'Hello, world!';
这是基本类型,但是我们还可以将这个字符串执行一些更复杂的操作,比如:
str.charAt(0); // 返回字符串的第一个位置的字符,即H
str.length; // 返回字符串的长度,即12
如果字符串仅仅是基本类型,不是引用类型(不是对象),那么为什么又具有方法和属性呢?答案就是:在后台JavaScript引擎会将str临时转换成String类型的一个实例,再调用String类型的方法和属性,调用完成后就将这个临时的实例销毁。过程如下:
(1)当调用字符串的某个属性和方法的时候;
(2)创建一个String类型的实例,相当于var strobj = new String(str);
(3)在调用strobj的方法或属性,返回结果;
(4)销毁strobj这个实例;
由于这个实例只是临时的,在操作执行结束之后就立即被销毁,所以对str进行添加属性和方法都是无意义的,因为新的属性和方法会随着实力的销毁一同被销毁。
下面介绍下String类型的方法和属性:
1. 提取子串
方法名 参数 功能
slice startIndex,endIndex 返回从起始位置到结束位置之间的子串
substr startIndex,lenght 返回从起始位置开始,length个长度的子串
substring startIndex,endIndex 返回从起始位置到结束位置之间的子串
三种方法都可以忽略第二个参数,如果忽略第二个参数,那么都默认取从起始位置到子串末尾。slice和subsring在传入正数作为参数的时候,结果是完全一样;但当传入负数作为参数的时候,结果有点不同了。slice会将负的参数和字符串长度相加的结果作为替换,而substring会将负的参数转换成0。substr会将第一个负的参数加上字符串长度作为替换,将第二个负的参数转换成0。
2. 提取字符
方法名 参数 功能
charAt index 返回字符串中index位置的字符
charCodeAt index 返回字符串中index位置字符的字符编码
3. 连接字符串
concat:接受任意多的参数,将其一次连接在原字符串的后面,然后返回新的字符串。
4. 搜索子串位置
方法 参数 功能
indexOf subStr,index(可选) 从字符串的头开始搜索子串在字符串中的位置,如果有index这个参数,那么就从index开始向后搜索
lastIndexOf subStr,index(可选) 从字符串的末尾开始搜多子串在字符串中的位置,如果有index参数,就从index的位置开始向前搜索
5. 模式匹配
方法 参数 功能
match 正则表达式 返回一个数组,第一项是与整个模式匹配的子串,之后的每一项一次保存捕获分组(如果存在),如 果表达式中有g标志符,那么将所有的匹配都放入数组中
search 正则表达式 返回第一个模式匹配的子串的位置,如果没有匹配成功就返回-1
replace 正则表达式(或字符串),替换字符串 将匹配成功的子串替换成第二个参数指明的字符串,如果正则表达式中存在g标志符,就会替换所有 的匹配成功的子串
6. 分隔字符串
split:将字符串按分隔符分隔成多个子串,然后依次放入一个数组中返回。接受两个参数,第一个参数可以是字符串也可以是正则表达式,第一个参数作为分隔符;第二个参数可选,如果指定,将指定返回的数组的length。
7. 大小写转换
toLowerCase,toLocaleLowerCase:将字符串全部转换成小写然后返回,两个方法在大多数情况下返回相同,但是对于个别语言会有所不同,toLocaleLowerCase是专门针对地区化的转换;
toUpperCase,toLocaleUpperCase:将字符串全部转换成大些然后放回;
8. 长度
length:lenght属性返回字符串大小的长度;