目录
- 基本类型和基本包装类型的不同
- 创建基本包装类型对象
- String对象
- 创建字符串对象
- 常用方法
- 案例
此篇脑图请戳[http://naotu.baidu.com/file/5bffe99e804bb037d5b9e55a68a68169?token=42130843de5e46b6]
基本类型和基本包装类型的不同
- 基本类型是没有方法的
- 基本包装类型有方法
// s1是基本类型,基本类型是没有方法的
var s1 = 'zhangsan';
var s2 = s1.substring(5);
// 当调用s1.substring(5)的时候,先把s1包装成String类型的临时对象,再调用substring方法,最后销毁临时对象, 相当于:
var s1 = new String('zhangsan');
var s2 = s1.substring(5);
s1 = null;
创建基本包装类型对象
var num = 18; //数值,基本类型
var num = Number('18'); //类型转换
var num = new Number(18); //基本包装类型,对象
// Number和Boolean基本包装类型基本不用,使用的话可能会引起歧义。例如:
var b1 = new Boolean(false);
var b2 = b1 && true; // 转换成false的五种情况 NaN undefined null '' ,这时b1已经是一个Boolean的对象了.
console.log(b2); //true
String对象
字符串的不可变
var str = 'abc';
str = 'hello';
console.log(str); // abc
// 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
创建字符串对象
var str = new String('Hello World');
// 获取字符串中字符的个数
console.log(str.length);
字符串对象的常用方法
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串,所以要声明一个变量来接收返回值
// 1 字符方法
charAt() //获取指定位置处字符
charCodeAt() //获取指定位置处字符的ASCII码
str[0] //HTML5,IE8+支持 和charAt()等效
// 2 字符串操作方法
concat() //拼接字符串,等效于+,+更常用
slice() //从start位置开始,截取到end位置,end取不到
substring() //从start位置开始,截取到end位置,end取不到
substr() //从start位置开始,截取length个字符
// 3 位置方法
indexOf() //返回指定内容在元字符串中的位置
lastIndexOf() //从后往前找,只找第一个匹配的
// 4 去除空白
trim() //只能去除字符串前后的空白
// 5 大小写转换方法
to(Locale)UpperCase() //转换大写
to(Locale)LowerCase() //转换小写
// 6 其它
search()
replace()
split()
fromCharCode()
// String.fromCharCode(101, 102, 103); //把ASCII码转换成字符串
案例
- 截取字符串"我爱中华人民共和国",中的"中华"
var str = new String("我爱中华人民共和国");
var newStr = str.substr(2, 2); //第一个参数是开始截取的字符索引,第二个参数截取字符的长度
console.log(newStr); // 中华
- "abcoefoxyozzopp"查找字符串中所有o出现的位置
var str = 'abcoefoxyozzopp';
var index = -1;
do {
index = str.indexOf('o', index + 1); //第一个参数是查找的对象,第二个参数时从第几个开始找
if (index !== -1) {
console.log(index);
}
} while (index !== -1)
- 把字符串中所有的o替换成!
var str = 'abcoefoxyozzopp';
// abc!efoxyozzopp
// 只会替换第一个找到的字符串
// str = str.replace('o', '!');
// console.log(str);
var index = -1;
do {
index = str.indexOf('o', index + 1);
if (index !== -1) {
str = str.replace('o', '!');
}
} while (index !== -1);
- 把字符串中的所有空白去掉' abc xyz a 123 '
// 传统方法1 去空格
var str = ' abc xyz a 123 ';
var index = -1;
do {
index = str.indexOf(' '); // 关键点在这里,第二个参数是每次从第几个数字开始往后找空格,这样前面的空格跳过了
console.log(index);
if (index !== -1) {
str = str.replace(' ', '');
}
console.log(str);
} while (index !== -1);
console.log(str);
//方法 2
var str = ' abc xyz a 123 ';
str = str.replace(/\s*/g, '');
console.log(str);
//方法3
var str = ' abc xyz a 123 ';
var a = str.split(' ');
console.log(a.join(''));
//方法4
var str = ' abc xyz a 123 ';
var res = '';
var arr = str.split('');
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== ' ') {
res += arr[i];
}
}
console.log(res);
- 判断一个字符串中出现次数最多的字符,统计这个次数
// - 判断一个字符串中出现次数最多的字符,统计这个次数
var str = 'abcoefoxyozzopp';
var ch; //出现的字符
var num; //出现的次数
var o = {};
//在对象中,常用的赋值操作为obj.a = 1 或 obj.a = 1;
// 读取值通常就用obj[a]
for (var i = 0; i < str.length; i++) {
var item = str.charAt(i);
//给o一个item属性,如果o里面有这个属性,返回true,执行o[item]++;, 如果没有这个属性,返回false,执行o[item] = 1(就是给o的item属性赋值)
if (o[item]) {
//已经有该属性
o[item]++;
} else {
//没有该属性
o[item] = 1;
}
}
// console.log(o);
num = 1;
for (var key in o) {
if (num < o[key]) {
// 出现最多的次数
num = o[key];
// 出现最多的字符
ch = key;
}
}
console.log(ch + '是出现次数最多的字符,' + '出现了' + num + '次');
bye for now!