4:String 构造函数
知识梳理
//1 字符串的不可变性
//2 每拼接一次 都会在内存中新开辟一个空间
//3 每赋值一次 都会在内存中新开辟一个空间
//4 字符串所有方法 都不会修改字符串本身 都是返回新字符串
知识目录
//1 根据字符返回位置 indexOf lastIndexOf
//2 根据位置返回字符
//2 替换字符串
//3 拼接字符串
//4 字符串转换为数组
//5 转换大小写
一 基本方法
1)根据字符返回索引
//1 正向查找 indexOf('要查找的字符',[开始的位置]); //2 反向查找 lastIndexOf();
var str = '桃花开了,桃叶绿了';
console.log(str.indexOf('桃',3));//从索引号第三个查找 '桃'
2)根据索引返回字符 [ charAt ]
//1 根据索引号返回字符 var str = 'abcdefg'; var index = str.charAt(0); // charAt('索引号'); // console.log(index); //典型应用:遍历字符串 for (var i = 0; i < str.length; i++) { console.log(str.charAt(i)); }
//2 h5新增 str(index) = charAt(); //3 根据索引号返回ASCII码 判断用户按下了哪个键 for (var i = 0; i < str.length; i++) { console.log(str.charCodeAt(i)); }
3)字符串替换 [ replace ]
var color = 'red'; console.log(color.replace('e','a')); //只替换第一个 替换多个需要用到正则 console.log(color.replace('替换谁','替换为谁'));
4)转换为数组 [ split ]
var str = 'red,blue,green'; str = str.split(','); var str1 = 'red&blue&green'; str = str.split('&');
5)转换大小写
toUpperCase();//转换大写
toLowerCase();//转换小写
二 实操案例
1)求某个字符出现的位置和次数 [ 重点案例 ]
//indexOf 返回第一个元素出现的位置 找不到返回 -1 //核心算符:先找到第一个o出现的位置 //然后:只要indexOf不是-1 就继续往后查找 //因为indexOf只能查找到第一个,所以后面的查找,我们利用第二个参数,当前索加1,从而继续查找 //需求:abcoefoxyozzopp 求所有o出现的位置和次数 var str = 'abcoefoxyozzopp'; var index = str.indexOf('o'); //查找O第一次出现的位置 赋值给变量index var num = 0;//统计次数的变量 while (index !== -1) { console.log(index); num++;//打印一次 计数器自增1 index = str.indexOf('o',index + 1);//我们把找到的再赋值给index }
//执行流程 // 第一次循环 index = 3 // 3不等于-1 条件成立 //打印o第1次出现的位置 3 //再执行indexOf查找,从上一次o出现的索引号3后面开始查找 index+1 = 4 //在索引6的位置找到了第2个 index = 6 //第二次循环 index = 6 //6不等于-1 条件成立 //打印o第2次出现的次数 6 //再执行indexOf查找,从上一次o出现的索引号6后面开始查找 index+1 = 7 //在索引9的位置找到了第3个 index = 9 //第三次循环 index = 9 //9不等于-1 条件成立 //打印o第3次出现的次数 9 //再执行indexOf查找,从上一次o出现的索引号9后面开始查找 index+1 = 10 //在索引12的位置找到了第4个 index = 12 //第四次循环 index = 12 //12不等于-1 条件成立 //打印o第4次出现的次数 12 //再执行indexOf查找,从上一次o出现的索引号12后面开始查找 index+1 = 13 //后面没有再找到 返回-1 //在执行while条件判断 -1 !== -1 为假 循环结束 //统计次数 后面新增一个num变量计数 //每打印一次index 自增1
2)判断字符串中出现次数最多的字符 并统计出现的次数 [ 重点案例 ]
//核心思路 //1 利用charAt遍历字符串 把每个字符都取出来 //2 把每个字符都保存到一个对象属性里
//3 如果对象没有该属性 = 1,如果有就 + 1; var str = 'abcoefoxyozzopp'; var obj = {}; //1 遍历每个字符存储到对象属性里面 for (var i = 0; i < str.length;i++) { var chars = str.charAt(i);//chars是字符串的每一个字符 if (obj[chars]) { //obj[chars]得到的是属性值 obj[chars]++;//如果存在就加1 } else { obj[chars] = 1;//如果不存在就等于1 } } console.log(obj);//{a: 1, b: 1, c: 1, o: 4, e: 1, …}
//2 遍历对象 找到值 var max = 0;//最大值变量 var ch = '';//保存出现次数最多的字符 for (var key in obj) { //key 得到的是属性名 //obj[key] 得到的是属性值 if (obj[key] > max) { max = obj[key]; ch = key;//把最大值的属性名给变量ch 因为key出了for in 就不起作用了 }//取最大值 } console.log(max); console.log('出现次数最多的是:' + ch);
3)替换字符串
案例:把字符串 'abcodfozzopp' 里面的o都替换为 * var str = 'abcodfozzopp'; while (str.indexOf('o') !== -1) { str = str.replace('o','*'); } console.log(str); str.indexOf('o') !== -1; 如果字符串里的o一直存在就继续循环
作业