开始说明 String 内置对象前,首先我们来看两行简单的代码:
var str='abcde';
console.log(str.length); //输出5
结果会输出 str 的长度 5,但是我们知道对象及复杂的数据类型才会有属性和方法,为什么这个简单的数据类型会有 length 属性呢???
这就是此文章的内容:基本包装类型
一:基本包装类型
什么是基本包装类型呢?就是把简单数据类型包装为复杂数据类型:
var str='abcde';
var temp=new String('abcde'); //简单数据类型转换为复杂数据类型
str=temp; //临时变量赋值给str
temp=null; //销毁临时变量
在 JS 中,除了String可以包装外,Number,Boolean 也可以进行包装,包装为复杂的数据类型后,就可以使用更多的属性和方法
二:字符串不可变
我们再看几行代码:
var str='aaa';
console.log(str);
str='bbb';
console.log(str);
可是字符串不是改变了吗?为什么还说字符串不可变呢,其实我们说的字符串不可变是开辟过空间后空间内的值不会消失,只是输出的结果看上去改变了,是地址在变,但是值没有变
我们先开辟了一块空间,地址里存放的内容为aaa,str指向这个地址,所以输出aaa
接着我们又新开辟了一个内存空间,地址里存放内容为bbb,str指向新的地址,所以输出结果改变,但空间内的值并没有改变
因此在开发中不要过多的重新赋值与拼接字符串,会大量占用电脑内存使其卡顿
三:根据字符返回位置
数组中我们了解了 indexOf() 方法和 lastIndexOf() 方法,字符串既然是基本包装类型,也可以使用这些方法,使用方法与数组相同,这里拓展新的参数,从自定义的索引位置开始查找
indexOf( 要查找的字符 ,要开始查找的索引位置)
lastIndexOf( 要查找的字符 ,要开始查找的索引位置)
从索引2 开始查找b的位置:
var str='abcdeabcde';
console.log(str.indexOf('b',2)); //从索引2开始查找b的位置
四:返回字符出现的位置和次数
思路:先查找第一次出现的位置,结果不是-1 就接着查到的位置的索引加一继续往后查找
var str='abcgdivywmasgcashdruaydcvuatyfnsya';
var index=str.indexOf('a');
var num=0;
while(index!=-1){
console.log(index);
num++;
index=str.indexOf('a',index+1);
}
console.log('a出现过的次数为:' + num);
五:根据位置返回字符
我们不仅可以根据字符返回位置,也可以根据位置来返回对应的字符
charAt( index ):参数为索引位置,返回值为该索引对应的字符
charCodeAt( index ):参数为索引位置,返回值为该索引处的字符对应的 ASCII 码(键盘上每个键都对应一个ASCII码,实际开发中用于判断用户按了那个键)
var str='abcgdivywmasgcashdruaydcvuatyfnsya';
console.log(str.charAt(0));
console.log(str.charCodeAt(0));
str[ index ]:此方法为H5新增方法。返回指定位置处字符
var str='abcgdivywmasgcashdruaydcvuatyfnsya';
console.log(str[0]);
六:判断出现最多次数的字符
思路分析:利用 charAt() 得到字符串中的每一个字符,创建一个空对象,判断该对象中有没有该字符,有的话让该字符自增1,没有的话将该对象的属性值赋为1,然后再遍历对象,用判断数组最大值的方法同样去得到对象内属性值最大的一个
var str=prompt('请随机输入一串字符');
var obj={};
for(var i=0;i<str.length;i++){
var chars=str.charAt(i);
if(obj[chars]){
obj[chars]++;
}
else{
obj[chars]=1;
}
}
console.log(obj);
var max=0;
var ch='';
for(var k in obj){
if(obj[k]>max){
max=obj[k];
ch=k;
}
}
console.log('最大值为' + ch + '共出现了' + max + '次');
七:拼接字符串
concat( 要拼接的内容 ) 有参数,参数为要拼接的内容,效果等同于字符串的 +
var str='abcd';
var str2='efgh';
console.log(str.concat(str2));
或者
var str='abcd';
console.log(str.concat('efgh'));
效果相同,均为:
八:截取字符串
substr( 起始位置,截取几个字符 ) 有2个参数,参数分别为起始的截取位置和要截取几个字符
var str='今天天气真晴朗';
console.log(str.substr(5,2));
九:替换字符串
replace( 要替换掉的字符,要替换的字符 ) 有两个参数,分别为要替换掉的字符和要替换的字符,要注意如果字符串里有多个要替换的字符,那么这个方法只能替换掉第一次出现的字符
如果想把字符串的目标字符全部替换掉,需要用循环:
var str='abatgcuyaycta';
while(str.indexOf('a')!=-1){
str=str.replace('a','*');
}
console.log(str);
十:字符串转换为数组
split( 字符串使用的分隔符 ) 有参数,参数取决于字符串内用的分隔符
var str='a,b,c,d';
var str2='a$b$c$d';
console.log(str.split(','));
console.log(str2.split('$'));
还有两个转换大小写的方法:
转换为大写:toUpperCase()
转换为小写:toLowerCase()