字符串的相关操作整理。

基本包装类型

即把简单数据包装成了复杂数据类型。

三个特殊引用类型:String、Number、Boolean。

 

字符串的不可变

看上去可以改变内容,其实改变的是地址。

(所以不要大量的拼接字符串,会占用大量内存,出现效率问题。)

字符串的各种操作不会改变本身,而是返回新的字符串。

 

字符串索引

string.indexOf(需要查找的字符);

string.indexOf(需要查找的字符, 起始索引);                         用法和Array一样
 

根据索引返回字符

1. .charAt(index);
2. .charCodeAt(index);        需要注意:这个方法返回的是字符的ASCII码
3. str[index]             H5 新增的方法,注意兼容性
 

字符串操作

1. .concat(str1, str2, str3, ...);    连接多个字符串,类似+,开发中更常使用+。
2. .substr(start, length);           start表示开始的索引,length表示选取的长度(新字符串的length)。
3. .slice(start, end);               start表示开始的索引(取到),end表示结束的索引(取不到)。
4. .substring(start, end);             start表示开始的索引(取到),end表示结束的索引(取不到)。
              和.slice()类似,但不接受负值。?存疑
5. 替换:      .replace('被替换的字符', '替换后的字符');
6. 拆分为数组:   .split('分隔符');            字符串拆分后返回数组
7. 转为大写:    .toUpperCase();
8. 转为小写:    .toLowerCase();
 
练习:
找出字符串中出现最多的字符,及其出现次数。
// 找出字符串中出现最多的字符,及其出现次数。
var song = 'Nevermind, I"ll find someone like you.';

// 方法一:自己写的思路
var charMost = '';
var times = 0;
// debugger;
for (var i = 0; i < song.length; i++) {
    var searchChar = song.charAt(i);
    var searchIndex = song.indexOf(searchChar);
    var searchTimes = 0;
    while (searchIndex !== -1) {
        searchTimes++;
        searchIndex = song.indexOf(searchChar, searchIndex + 1);
    }
    if (searchTimes > times) {
        times = searchTimes;
        charMost = searchChar;
    }
}
console.log(charMost, times);

// 方法二:使用对象
var counter = {};
for (var i = 0; i < song.length; i++) {
    var char = song.charAt(i);
    // 思考:以下用对象名.属性名可以吗?
    if (counter[char]) {
        counter[char]++;
    } else {
        counter[char] = 1;
    }
    console.log(counter);
}
var max = 0;
var maxChar = '';
// 遍历对象
for (var k in counter) {
    if (counter[k] > max) {
        maxChar = k;
        max = counter[k];
    }
}
console.log(maxChar, max);