Javascript内置对象之String字符串对象
一、基本包装类型
-
基本包装类型: 就是把简单数据类型 包装成为了 复杂数据类型 (使简单数据类型也具有属性和方法)
-
var str = 'andy'; console.log(str.length); //过程 // (1) 把简单数据类型包装为复杂数据类型 var temp = new String('andy'); // (2) 把临时变量的值 给 str str = temp; // (3) 销毁这个临时变量 null销毁 temp = null;
二、字符串的不可变
指的是字符串里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
var num= '123';
num='456';//'123'并没有改变为'456',而是在内存中重新开辟了一个区域存'456'
console.log(num);//'456'
由于字符串的不可变,在大量拼接字符串的时候会有效率问题
大量拼接字符串以及多次给变量赋值会占用大量的内存空间导致电脑变卡
三、根据字符返回位置
方法名 | 说明 | 返回值 | 注意 |
---|---|---|---|
indexOf(‘要查找的字符’, [起始的位置]1) | 在数组中查找给定元素的索引号从前往后查找 | 如果存在则返回索引号;如果不存在则返回-1 | 如果给定元素在一组数组中同时多次出现,则返回的是从起始查找的位置开始第一次出现的给定元素的索引号 |
lastIndexOf() | 在数组中查找给定元素的索引号从后往前查找 | 如果存在则返回索引号;如果不存在则返回-1 | 如果给定元素在一组数组中同时多次出现,则返回的是最后一次出现的给定元素的索引号 |
//1.indexOf()
var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));
console.log(str.indexOf('春', 3));
// 从索引号是3的位置开始往后查找 输出结果为8
例:
var num = "shiowsayhoibgosiwisohbvsiorhsvfwoesiufsirogbsah";
var sty = num.indexOf('s'); //在num内查找s
var sum = 0;
// s存在则不为-1
while (sty !== -1) {
console.log(sty); //输出s的位置(索引号)
sty = num.indexOf('s', sty + 1); //在次查找s, 使他在上一个s出现的位置的后一位开始查找
sum++; //每一次循环sum都会加1
//最后找不到s时 sty=-1 所以会退出循环
}
console.log(sum); //输出一共有多少个s
四、根据位置返回字符
方法名 | 说明 | 使用 | 注意 |
---|---|---|---|
charAt(index) | 返回指定位置的字符(index 字符串的索引号) | str.charAt(3) | |
charCodeAt(index) | 获取指定位置处字符的ASCII码1 。 (index 索引号) | str.charAt(i) | |
str[index] | 获取指定位置处字符 | str[0] HTML5新增,IE8+支持和charAt()等效 |
例:
var str = 'hfjvkdhskjghsfgvnvsikwpoaflmdkcvnavjkhsdujh';
var num = {}; //空的对象
for (var i = 0; i <= str.length; i++) { //遍历数组
var asd = str.charAt(i); //返回在str里i位置的字符
if (num[asd]) { //判断在num里是否有ast内的字符( 这个字符是 在str里i位置的字符))
num[asd]++; //有的话+1
} else {
num[asd] = 1; //没有的话就给这个字符赋值为一
}
}
console.log(num); //输出新的对象集合
//判断出现的最多的次数
var o = 0; //创捷一个新对象使其为0
for (var k in num) { //遍历之前的对象集合num
//k得到的是属性名
if (num[k] > o) { //判断之前的对象集合num与新对象o的大小
o = num[k]; //若旧对象num>新对象o则将旧对象赋值给新对象
ch = k; //将出现次数最多对象赋值给ch
}
}
console.log(o); //输出新对象
console.log(ch);
注意:在遍历的过程中,把字符串中的每个字符作为对象的属性存储在对象总,对应的属性值是该字符出现的次数
五、字符串操作方法
- concat(‘字符串1’,‘字符串2’…)
多用于连接两个或两个以上字符串 用于拼接字符等效于+
var str = 'andy';
console.log(str.concat('red'));
//输出结果andyred
- substr(start,length)
从start开始(索引号),length 取得个数
var str1 = 'asdfghjkl';
console.log(str1.substr(2, 3));
//输出结果dfg
- sllice(start,end)
从start开始,end结束,end取不到(start、end都是索引号)
var str1 = 'asdfghjkl';
console.log(str1.sllice(2, 3));
//输出结果:df
- substring(start,end)
从start开始,end结束,end取不到(start、end都是索引号)
*基本与sllice相同,但不接受负值
var str1 = 'asdfghjkl';
console.log(str1.substring(2, 3));
//输出结果:df
六、replace()替换字符的方法
替换字符 replace(‘被替换的字符’, ‘替换为的字符’)
//1.它只会替换第一个出现的对应的字符
var str = 'anda';
console.log(str.replace('a', 'b'));//输出结果:bnda
//2.同时替换多个
var str1 = 'abcoefoxyozzopp';
while (str1.indexOf('o') !== -1) {
str1 = str1.replace('o', '*');
}
console.log(str1);
//输出结果:abc*ef*xy*zz*pp
七、split()字符串转换为数组方法
split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。
字符串.split("分割字符")
注意:
split()字符串转换为数组;
join()数组转换为字符串。
//用什么分割字符分割就在split("")内填什么分割字符
var str2 = 'red, pink, blue';
console.log(str2.split(','));
var str3 = 'red&pink&blue';
console.log(str3.split('&'));
八、toUpperCase()转换为大写
使用:
字符串.toUpperCase()
const sentence = 'The quick brown fox jumps over the lazy dog.';
console.log(sentence.toUpperCase());
// 返回值THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
九、toLowerCase()转换为小写
使用:
字符串.toLowerCase()
const sentence = 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG';
console.log(sentence.toLowerCase());
// 返回值The quick brown fox jumps over the lazy dog