****###0.前言
最近学习前端知识,扩充自己的知识面,正好学习到javascript中对字符串的介绍,写这篇文章纯粹就是为了当笔记,以备将来查看的时候能够方便自己。
1.认识字符串字符串分两种类型
:第一种:基本类型(String)
var str1 = "hello world"
第二种:对象类型
var str2 = new String("sunck is a nice man!");
案例:
console.log(str1);
console.log(str2);
console.log(typeof str1);
console.log(typeof str2);
运行结果:
由此可见第二种类型为object对象。
对象:包含了属性和方法,在前端开发当中大量的字符串处理,基本数据类型无法完成这些操作,JS添加了一种封装了属性与方法的字符串对象供开发人员使用。
二者的区别
1.类型不一样;
2.字符串对象封装了属性和方法。
注意:当我们在使用字符串时可以直接用基本类型的字符串调用字符串对象的封装方法,无需手动转换。
2.字符串的长度案例:
var str1 = "hello word";
var str2 = new String("HelloWorld");
console.log(str1);
console.log(str1.length);
console.log(str2);
console.log(str2.length);
结果:
使用length来表示字符串的长度,但是要注意字符串的length和数组的length是不一样的,只是名字相同而已。length是只读属性。字符串的长度是按各国标注字符来计算的。如:
var str3 = "你好!の";
console.log(str3.length);
获取对应下标处的字符
console.log(str2[2]);
console.log(str3[2]);
3.字符串的常用方法
字符串的使用方法有很多,不过常用的就那么几个,只要记下来就OK了。
(1)charAt(index)
功能:获取对应下标处的字符
参数:下标
返回值:获取到的字符,没有对应下标返回空字符串。
案例:
var str1 = "sunck辉 is a good man";
var ret1 = str1.charAt(3);
var ret2 = str1.charAt(5);
var ret3 =str1.charAt(29);
console.log(ret1);
console.log(ret2);
console.log(ret3);
console.log(typeof ret3);
console.log("*" + ret3 + "*");
运行结果:
(2)charCodeAt(index)
功能:获取对应下标处的字符编码
参数:下标
返回值:获取到的字符编码(0~65535),没有对应的下标返回NaN。
var str2 = "sunck辉 is a good man";
var ret4 = str2.charCodeAt(3);
var ret5 = str2.charCodeAt(5);
var ret6 = str2.charCodeAt(29);
console.log(ret4);
console.log(ret5);//36745 Unicode(万国码)
console.log(ret6);
运行结果:注释:“99”是字母“c”的ASCII编码,需要记住的三个ASCII编码:
- 48--->字符“0”
- 65--->字符“A”
- 97--->字符“a”
(3)String.fromCharCode(ASCII码)
这是类名调用方法,称为静态方法(类方法);
对象调用方法,称为实例方法(对象方法)。
静态方法优点:
1.不用创建对象,直接类名调用,节省内存空间。
2.效率高一些
功能:将ASCII值转成对应的字符
参数:ASCII值返回值:对应的字符
var ret7 = String.fromCharCode(36745 );
console.log(ret7);
(4)字符串大小写转换
注意:字符串创建后就不能改变了
var str3 = "SUNck辉 is a good man";//全部转成小写,以返回值的形势得到结果。原字符串不会改变
var ret8 = str3.toLowerCase();
console.log(ret8);
console.log(str3);
结果://全部转成大写,以返回值的形势得到结果。原字符串不会改变
var ret9 = str3.toUpperCase();
console.log(ret9);
(5)判断是否相等
var str4 = 1;
var str5 = "1";
console.log(str4 == str5);//值相等
console.log(str4 === str5);//绝对相等(值、类型)
(6)字符串比较大小
规则:两个字符串从下标为0的字符开始比较,如果,谁的ASCII值大谁就大,如果相等,继续比较后面的字符,当两个字符不相等时停止比较,此时谁的ASCII值大谁就大。
var str6 = "sunck辉 is good man";
var str7 = "sunck辉 is nice";//返回值如果为1则前面的大于后面的,如果返回值为-1那么后面的大于前面的,如果返回值为0说明相等。下面是str6和str7比较,就把str7放在后面。
var ret10 = str6.localeCompare(str7);//想和谁比较,就把谁放在括号里。```
**(7)汉字字符串比较大小**
var str8 = "北京";
var str9 = "内蒙古";
console.log(str8 > str9);
**(8)查找字符串**
var str10 = "sunck is a good man ! sunck is a good man";
//默认从左至右查找都一次出现的子字符串
//返回值:子串第一次出现的下标,如果没有找到子串返回-1
var ret11 = str10.indexOf("sunck");
console.log(ret11);
console.log(str10);
//从右至左查找第一次出现的子字符串
var ret12 = str10.lastIndexOf("sunck");console.log(ret12);
**(9)替换字符串replace(oldStr,newStr)**
var str11 = "sunck is a good man!sunck is a good man"
var ret13 = str11.replace("good","nice");
console.log(ret13);
注意:目前来说只能更改第一次出现的oldStr。
**(10)提取子串**
var str12 = "sunck is a good man!sunck is a good man"
//第一种方法:从某个下标开始提取,一直提取到原字符串的末尾。
var ret14 = str12.substring(3);console.log(ret14);
//第二种方法:从参数1下标开始提取,一直提取到原字符串参数2下标之前。
var ret15 = str12.substring(3,18);
console.log(ret15);
//第三种方法:从某个下标开始提取,一直提取到原字符串的末尾。与substring一样。
var ret16 = str12.substr(3);
console.log(ret16);
//第四种方法:从某个下标开始提取,一直提取到参数2个长度。
var ret17 = str12.substr(3,18);
console.log("" + ret17 + "");
**(12)字符串的分割**
var str13 = "sunck is a good man!sunck is a good man";
var ret18 = str13.split(" ");
console.log(ret18);
注:用参数切割字符串,结果保存在数组中返回
**案例:**
编写函数,返回字符串(只由英文字母和空格组成)中有多少个单词
function wordCount(str) {
var index = 0;
var count = 0;
while (1) {
while (str[index] == " ") {
index++;
if (index == str.length) {
return count;
}
}
count++;
while (str[index] != " ") {
index++;
if (index == str.length) {
return count;
}
}
}
}
var a = wordCount(" sunck is a good man");
console.log(a);
function s(l) {
var arr = l.split(" ");
var num = 0;
for(var i in arr) {
if (arr[i].length > 0) {
num++;
}
}
return num;
}
###4.总结
上面的方法是在字符串中常用的方法,如果还有其它的方法,欢迎来信,谢谢打赏!!