1. 字符串的不可变
指的是已经存在的值, 看似可以被改变, 其实只是变量指向的地址改变了, 内存中新开辟了一个内存空间, 原来的值并未被抹去.
- var str='pink';
- str='red';
首先, 内存中开辟了一个内存空间用来存放 pink,str 指向这个内存地址, 当执行到第二句时, 内存中开辟了一个新的空间用来存放 red,str 指向这个新的内存空间, 用来存放 pink 的空间仍然存在, pink 也并没有没抹去.
因此, 编写代码时尽量不要多次对字符串重新赋值或拼接, 会占用很多内存资源
2 字符串对象
根据字符串返回位置
字符串的所有方法, 都不会修改字符串本身 (字符串是不可变的), 操作完成后会返回新的字符串
方法名 | 说明 |
indexOf(‘要查找的字符‘,开始的位置) | 返回指定内容在源字符串中的位置,找不到返回 - 1,开始的位置是 index 索引号 |
lastIndexOf() | 从后往前找,只找第一个匹配的 |
indexOf() 中开始的位置可不写, 会默认从索引号为 0 的位置开始查找, 遇到目标字符即返回索引号. 当然 lastIndexOf() 中也可以添加开始查找的位置.
案例:
查找字符串中某元素出现的次数以及位置.
1: 核心算法: 先查找第一个核心元素出现的位置
2: 如果 indexOf() 返回的值不是 - 1 则继续往后
3: 后面的查找, 利用 indexOf() 的第二个参数, 当前索引加 1, 继续查找
- var str='天意让我遇见今生的你天';
- var index=str.indexOf('天');
- var number=0;
- while(index!==-1){
- console.log(index);
- index=str.indexOf('天',index+1);
- number++;
- }
- console.log(number);
根据位置返回字符 (重点)
方法名 | 说明 | 使用 |
charAt(index) | 返回指定位置的字符 | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的 ASCII 码 | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 | html5,IE8 + 支持和 charAt() 等效 |
charCodeAt() 实际开发中使用它的目的: 判断用户按下了哪个键, 比如返回值为 65, 即可知用户按下了 A 键, 可用于在游戏中按动某键来实现移动或其它功能的
案例: 判断一个字符串中出现次数最多的字符, 并统计其次数
1 核心算法: 利用 charAt() 遍历这个字符串
2 把每个字符都存储给 1 对象, 如果对象里没有该属性, 则创建该属性且值为 1, 若有则属性值加 1
3 遍历对象, 得到最大值和该字符
- var str="aboodegotooforo";
- var o={};
- for(var i=0;i<str.length;i++){
- var chars=str.charAt(i);
- if(o[chars])
- o[chars]++;
- else
- o[chars]=1;
- }
- var max=0;
- var ch='';
- for(var k in o){
- if(o[k]>max){
- max=o[k];
- ch=k;
- }
- }
- console.log(max);
- console.log(ch);
拼接以及截取字符串
方法名 | 说明 |
concat(str1,str2,str3..) | 用来拼接两个或多个字符串,等效于 +,+ 更常用 |
substr(start,length) | 从 start 位置开始,length 为取得个数 |
slice(start,end) | 从 start 位置开始,截取到 end,end 取不到 |
substring(start,end) | 从 start 位置开始,截取到 end,end 取不到,基本与 slice 相同,但是不接受负值 |
- var str="pink";
- console.log(str.concat('red'));
- var str1='天意让我遇见今生的你';
- console.log(str1.substr(2,2));
替换字符串
- replace('被替换的字符','替换为的字符')
- var str="ababab"
- console.log(str.replace('a','b'));
- // 将字符串中的 a 全部替换
- while(str.indexOf('a')!==-1){
- str=str.replace('a','b');
- }
- console.log(str);
字符转换为数组
- spilt('分隔符')//spilt() 中的分隔符取决于字符串中的连接方式, 如下:
- var str='pink,green';
- console.log(str.split(','));
- var str1='pink&green'
- console.log(str1.split('&'));
- toUpperCase()// 转换大写
- toLowerCase()// 转换小写
来源: http://www.bubuko.com/infodetail-3458720.html