String 对象
之前学习的是 基本数据类型 String 类型,现在讨论的是 String对象(包装类型)。
String的特点:字符串的不可变性。
var str = 'abc';
str = 'hello';
分析上面两行代码,起初给 str 赋值为 'abc'。当重新给 str 赋值的时候,常量 ‘abc’ 不会被修改,依然在内存中。
重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
注意:由于字符串的不可变,在大量拼接字符串的时候会有效率问题。
创建字符串对象
var str = new String('Hello World'); // 通过构造方法来创建字符串对象
常用方法
注意:字符串的所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。
1、字符方法
charAt() // 获取指定位置处字符
charCodeAt() // 获取指定位置处字符的 ASCII 码
str[0] // HTML5 的方法,IE8+支持,同 charAt() 方法
2、字符串操作方法
concat() // 拼接字符串,等效于+,+更常用
slice() // 从 start位置开始,截取到 end 位置,end 取不到
substring() // 返回一个字符串在开始索引到结束索引(不包括)之间的一个子集, 或从开始索引直到字符串的末尾的一个子集。
substr(index,length) // 返回一个字符串中从指定位置开始到指定字符数的字符(length省略,到字符串末尾)
3、位置方法
indexof() // 返回调用它的 String
对象中第一次出现的指定值的索引,如果没有,返回 -1
lastIndexof() // 返回指定值在调用该方法的字符串中最后出现的位置,如果没找到则返回 -1,从该字符串的后面向前查找
4、去除空白
trim() // 只能去除字符串前后的空白
5、大小写转换方法
to(Local)UpperCase() // 转换为(本地)大写
to(Local)LowerCase() // 转换为(本地)小写
6、其他方法
search() // 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1 replace(regexp,substr) // 返回一个由替换值替换一些或所有匹配的模式后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数
split() // 指定的分隔符字符串将一个String
对象分割成字符串数组
fromCharCode() // 返回由指定的UTF-16代码单元序列创建的字符串(将 ASCII 码转换为字符串)
案例:
1、查找字符串中所有o出现的位置。
1 var s = 'abcoefoxyozzopp';
2 var array = [];
3 do {
4 var index = s.indexOf('o', index + 1);
5 if (index != -1) {
6 array.push(index);
7 }
8 } while (index > -1);
9 console.log(array);
2、把字符串中所有的o替换成!
1 var s = 'abcoefoxyozzopp';
2 var index = -1;
3 do {
4 index = s.indexOf('o', index + 1);
5
6 if (index !== -1) {
7 // 替换
8 s = s.replace('o', '!');
9 }
10 } while(index !== -1);
11 console.log(s);
3、判断一个字符串中出现次数最多的字符,统计出现次数
1 var s = 'abcoefoxyozzopp';
2 var ch;
3 // 此字符出现的次数
4 var num;
5 // 记录字符串中每一个字符出现的次数
6 var o = {};
7
8 for (var i = 0; i < s.length; i++) {
9 var item = s.charAt(i);
10 if (o[item]) {
11 // 已经有该属性,+1
12 o[item]++;
13 } else {
14 // 对象中没有该属性
15 o[item] = 1;
16 }
17 }
18
19 // 2 求最大值 并且找到次数最多的字符
20 // 假设最大值是1
21 num = 1;
22 for (var key in o) {
23 if (num < o[key]) {
24 // 最多的次数
25 num = o[key];
26 // 次数最多的字符
27 ch = key;
28 }
29 }
30
31 console.log(num);
32 console.log(ch);
33
4、获取 url 后面的参数
1 // 获取url后面的参数
2 function getParams(url) {
3 // 获取? 后面第一个字符的索引
4 var index = url.indexOf('?') + 1;
5 // url中?后面的字符串 name=zs&age=18&a=1&b=2
6 var params = url.substr(index);
7 // 使用& 切割字符串 ,返回一个数组
8 var arr = params.split('&');
9 var o = {};
10 // 数组中每一项的样子 key = value
11 for (var i = 0; i < arr.length; i++) {
12 var tmpArr = arr[i].split('=');
13 var key = tmpArr[0];
14 var value = tmpArr[1];
15
16 o[key] = value;
17 }
18 return o;
19 }
20 var url = 'http://www.baidu.com/login?name=zs&age=18&a=1&b=2';
21 var obj = getParams(url);
22 console.log(obj);
23
24 console.log(obj.name);
25 console.log(obj.age);