第五部分:字符串对象
(一)基本包装类型
为了方便基本数据类型进行操作,JS还提供了三个特殊的引用类型:String,Number,Boolean.
基本包装类型就是将简单数据类型包装成复杂数据类型,以获取一些方法.类似于java里的包装类.
如:
var str='andy'; console.log(str.length);
str是简单数据类型,没有属性和方法,只有对象才有属性和方法,但是上面的代码却可以正常执行,这是因为JS会把基本数据类型包装成复杂数据类型,其执行过程如下:
//1.生成临时变量,将简单数据类型包装成复杂数据类型 var temp=new String('andy'); //2.赋值给我们声明的字符变量 str=temp; //3.销毁临时变量 temp=null;
(二)字符串不可变性
指的是里面的值不可变.
虽然看上去可以改变字符串的内容,但实际上是修改了地址,在内存中开辟了一个新的空间,原来的字符串不会被销毁.
所以尽量不要大量的对字符串进行赋值,也不要大量拼接字符串.疯狂消耗内存
(三)返回位置
由于字符串所有的方法,都不会修改字符串本身,所以每次修改操作完成,都会返回一个新字符串
字符串返回位置方法:
-
indexOf('要查找的字符',n): 返回指定内容在原字符串的位置,如果找不到,返回-1.从索引号为n的位置开始找.
var str='改革春风吹满地,春天来了'; console.log(str.indexOf('春')); //返回值为2 console.log(str.indexOf('春',3)); //从索引为3开始找,返回值为8
-
lastIndexOf():从后往前找,其他都一样.
案例:返回字符位置
查找字符串'abcoefoxyozzopp'中所有o出现的位置及次数
var str='abcoefoxyozzopp'; var arr=[]; for(var i=0;i<str.length;i++){ if(str.indexOf('o',i)!=-1){ i=str.indexOf('o',i); arr.push(i); } } console.log(arr);
(四)根据位置返回字符
三个方法:
-
charAt(index): 返回指定位置的字符
-
charCodeAt(index): 获取指定位置字符处的ASCII码,用处是判断用户按下了哪个键
-
str[index]: 获取指定位置处字符
案例:统计出现次数最多的字符
判断一个字符串'abcoefoxyozzopp'中出现次数最多的字符,并统计其次数
核心算法:利用chatAt()遍历字符串,将每个字符都存储给对象,如果对象没有该属性,就设为1,如果有,就++.
最后遍历对象,得到最大值和该字符
var str='abcoefoxyozzopp'; var container={}; for(var i=0;i<str.length;i++){ var s=charAt(i); if(container[s]){ //判断对象中是否有这个字母 container[s]++; //如果有,增多一个 }else{ coontainer[s]=1; //如果没有,创建一个. } } for(var k in container){ //遍历对象 var max=0; var ch; if(o[k]>max) { //判断出现次数最多的 max=o[k]; ch=k; } } console.log(max,k);
(五)拼接和截取字符串
字符串操作方法:
-
concat(str1,str2...): 拼接多个字符串,等效于+,+更常用
var str='andy'; console.log(str.concat('red'));
-
substr(start,length): 截取字符串,从start的位置开始,截取length个字符.最重要,记住这个就好
-
slice(start,end): 截取字符串,从start开始,end截止,不取end
-
substring(start,end): 从start开始,截取到end,end不取,但是不接受负值
(六)替换字符串及转换为数组
-
replace('被替换的字符','替换为的字符'): 替换字符串,将前面的替换为后面的
var str='andyandy'; console.log(str.replace('a','b'));
输出为:bndyandy
只会替换第一次看到的字符,如果要全局替换,需要写一个循环.
-
split('分隔符')字符串转化为数组.取字符串中的某个字符作为分隔符,分割字符串.
var str='red,pink,blue'; console.log(str.split(','));