一、字符串对象
JS中字符串虽然看似是一个简单数据类型,实际上在编辑器内部是把它包装成了复杂数据类型。
如:
//在JS中定义一个字符串为CHIX
var str = 'CHIX';
//在编辑器内部实际执行方法为:
① var temp = new String('CHIX');
② str = temp;
③ temp = null;
因此字符串实际是一个对象,含有对象特有的属性和方法。
二、字符串具有不可变性
执行代码
var str = 'x';
str = 'm';
似乎是改变了字符串的值,但是实际上是在存储器的内部开辟了一块新的存储区域,改变了str指向的存储区域,类似这样:
虚线为原先str所指向的存储空间,实线为str目前所指向的存储空间。
因此尽量避免大量拼接字符串,开辟的字符串空间过多,导致程序运行迟缓甚至卡死。
三、字符串对象方法
1.
indexOf ('要查找的字符',起始位置) | 返回指定内容在原字符串中的位置,如果找不到就返回-1。 |
lastIndexOf() | 从后往前查找,找到第一个匹配的字符串的索引号。 |
e.g.
var str = 'I can not rest from travel';
console.log(str.indexOf('o'));//查找从头开始第一个'o',返回值为7
console.log(str.indexOf('o',8));//查找从第8个位置开始的'o',返回值为17
console.log(str.lastIndexOf('o'));//倒着查找到第一个'o',返回值为17
应用案例:
查找字符串“
"中所有'o'出现的位置以及次数。
算法:
①先查找第一个'o'出现的位置
②只要indexOf返回的结果不是-1,就继续往后查找
③因为indexOf不加起始位置只能查找到第一个'o'所在的位置,所以后面的查找要利用第一次查找的索引号加1
e.g.
var str = 'I went out to the hazel wood,because a fire was in my head';
//查找第一个'o'的位置
var index = str.indexOf('o');
//设置一个num变量记录'o'出现的次数
var num = 0;
while(index != -1) {
//输出'o'的位置
console.log(index);
//记录'o'出现的次数
num++;
//查找下一个'o'的位置
index = str.indexOf('o',index+1);
}
2.根据位置返回字符串
charAt(index) | 返回指定位置的字符(index为字符串的索引号) |
charCodeAt(index) | 获取指定位置处字符的ASCⅡ码,可以用于记录用户输入的字符。 |
str[index] | HTML5,IE8+支持,和charAt()等效。 |
应用案例:
判断一个字符串“and cut and peeled a hazel wand,and hooked a berry to a thread”中出现次数最多的字符,并统计其次数。
算法:
①利用charAt()遍历整个字符串
②把每个字符都存储给对象,如果对象没有该属性,就记为1,如果存在则属性值+1
③遍历对象属性值,得到最大值和该字符
e.g.
var str = 'and cut and peeled a hazel wand,and hooked a berry to a thread';
//定义一个空的对象,用于记录出现的字符及其出现次数
var count = {};
for (var i = 0; i < str.length; i++) {
//获得字符串中的每个字符
var chars = str.charAt(i);
if (count[chars]) {//count[chars]得到属性值
count[chars]++;
}
else {
count[chars] = 1;
}
}
var max = 0;
var ch = '';
for (var k in count) {
//用k得到属性名,count[k]得到属性值
if (count[k] > max) {
max = count[k];
ch = k;
}
}
console.log('出现最多的字符是' + ch);
console.log('出现次数为:' + max);
}