本文共 10448 字,大约阅读时间需要 34 分钟。
Write By Monkeyfly
以下内容均为原创,如需转载请注明出处。
1、内置对象简介2、获取字符串长度3、大小写转换4、截取某一字符(获取字符串中指定位置的某一字符)5、截取字符串6、替换字符串7、分割字符串8、检索字符串的位置
在JavaScript中,对象可以分为两种:
(1)内置对象;【系统已经定义好的对象,可以直接使用】 (2)自定义对象;【需要我们自己定义的对象】一定要记住:
初学阶段,不必掌握自定义对象,先学好内置对象,等基础学完了,等到进阶的时候再去学习自定义对象。
常用的内置对象有四种:
(1)String:字符串对象
Array:数组对象
(3)Date:日期对象
(4)Math:数学对象
问:为什么要先学习字符串对象呢?
答:因为字符串对象是内置对象中最基础的,后面学到的知识都会涉及到字符串对象的用法,毕竟语言都是环环相扣的,互相之间都是有关联的。
比如说:数组对象,这里就存在数组和字符串之间的相互转化问题,用于处理一些比较复杂的操作问题(学到后面自然就明白了)。而且只有在最开始掌握了字符串对象的用法,在后面其它内置对象的学习中才会更加顺手。语法:
str.length
说明:
(1)str
就是字符串的名字,即字符串名.length
点运算符(.)
。 其中"."
可以理解为“的”
。所以,str.length
可以认为是str的length(长度)
。 (3)字符串对象的属性有好几个,但是我们只需要掌握这一个就行。因为这个最常用到。 举例1:
var str = "I love you.";document.write(str.length); //是11而不是8
举例2:
function getStrLen(num){ //js的隐式类型转换,数字+空字符串=字符串 var str = num + ""; return str.length;}var result = "" + "5201314是" + getStrLen(5201314) + "位数" + "";document.write(result);//5201314是7位数
分析:
作为初学者,我们最容易忽略的地方就是:空格。
原来,空格本身也会被作为一个字符来处理的。
语法:
字符串名.toLowerCase() //大转小字符串名.toUpperCase() //小转大
说明:
(1)调用对象的方法,也是使用点运算符(.)
。
“()”
小括号。 举例:
var str = "I love you.";document.write("" + "正常:" + str + "");//I love you.document.write("" + "小写:" + str.toLowerCase() + "");//I love you.document.write("" + "大写:" + str.toUpperCase() + "");//I LOVE YOU.
语法:
字符串名.charAt(n)
说明:
n为正整数,表示字符串中的第n+1个字符。简单来说,只要记住n是下标就行了。
注意:
(1)字符串中的第1个字符的下标是0,第2个字符的下标是1,以此类推,第n个字符的下标就是n-1。
(2)这一点与数组下标是一样的。举例:
var str = "monkeyfly";document.write("" + "第1个字符是:" + str.charAt(0) + "");//mdocument.write("" + "第9个字符是:" + str.charAt(8) + "");//y
问题:找出字符串中小于某个字符的所有字符
思路:1.提前定义一个空的字符串,用于保存比较后的字符。2.for循环遍历字符串,利用charAt()方法,将当前得到的字符串中的字符与“某个字符”进行比较。3.如果当前字符小于要比较的“某个字符”,则将它放在追加到空的字符串中。(循环一次,追加一次)
var str = "hello world!";//定义一个空字符串用来保存截取后的字符var result = "";for (var i = 0; i < str.length; i++) { //两个字符之间比较的是ASCII码值的大小 if(str.charAt(i) < "s"){ //注意:+=中间不能用空格隔开,否则会报错 result += str.charAt(i) + ","; }}document.write("" + result + "");//h,e,l,l,o, ,o,r,l,d,
语法:
字符串名.substring(start,end)
返回值:
返回一个新的字符串。该字符串是原始字符串的一个子字符串。它的长度是end-start
。 说明:
(1)start
表示开始位置,end
表示结束位置。
start
和end
都为非负的整数。一般都是从0开始,且end
大于start
。 (3)截取范围:前闭后开。即[ start,end )
,包含start
,不包含end
。 (4)end
可以省略。如果省略不写,表示从start
一直截取到字符串的末尾。 注意:
substring() 不接受负的参数。也就是说,它只能从前往后截取,不能从后往前截取。举例:
var str = "I love you";var cut = str.substring(2,6);var end = str.substring(2);document.write("" + "待截取的字符串:" + str + "");//I love youdocument.write("" + "所截取的字符串为:" + cut + "");//lovedocument.write("" + "所截取的字符串为:" + end + "");//love you
语法:
字符串名.replace(原字符串,替换字符串)字符串名.replace(正则表达式,替换字符串)
说明:
大家一定要记住:不管是哪种形式的替换,替换的字符串始终为第二个参数。举例1:
第一种形式:字符串替换
var str_old ="I love you!";var str_new = str_old.replace("you","javascript");document.write("" + "原始字符串:" + str_old + "");//I love you!document.write("" + "替换后的字符串为:" + str_new + "");//I love javascript!
举例2:
第二种形式:正则表达式替换
var str_old ="I love you!I love JavaScript!I love monkeyfly!";var str_new = str_old.replace(/I love/g,"我爱");document.write("" + "原始字符串:" + str_old + "");//I love you!I love JavaScript!I love monkeyfly!document.write("" + "替换后的字符串为:" + str_new + "");//我爱 you!我爱 JavaScript!我爱 monkeyfly!
分析:
(1)str_old.replace(/I love/g,"我爱");
表示用正则表达式"/I love/g"
来将字符串中的所有"I love"
字符替换成“我爱”
。
/g
是JavaScript
中正则表达式的全局匹配模式 。它是正则表达式对象的其中一个属性,g
是global
的缩写,表示是否全文搜索。总之,用它就可匹配到所有指定要查找的字符串。 (3)str_old.replace(/I love/g,"我爱"); ≠ str_old.replace("I love","我爱");
前者会替换所有的"I love"
,但是后者只能替换遇到的第一个"I love"
。 (4)正则表达式比较复杂,如需深入了解和学习,可以在绿叶学习网学习[正则表达式的基础教程]。()。 在JavaScript中,我们可以使用split()
方法将一个字符串分割成一个字符串数组。
语法:
字符串名.split("分割符",指定返回的数组的最大长度);
说明:
(1)分割符可以是一个字符、多个字符或一个正则表达式。
(2)分割符并不作为 返回数组元素的一部分,因为分割符只是用来分割的。 (3)第一个参数为必需项,第二个参数为可选项。 (4)第二个参数表示,分割字符串之后所截取数组的长度,即得到分割后的前n个元素。注意:如果没有指定该参数,整个字符串都会被分割,不考虑它的长度。
举例1:
方法一:最笨的方法实现
var str = "HTML,CSS,JavaScript,jQuery,Ajax";/*字符串被分割后会转换成一个数组,数组中存放原来字符串中的所有字符片段*/var arr = str.split(",");/*分割符一定要使用原字符串中存在的符号*/document.write("" + "待分割的字符串是:" + str + "");//HTML,CSS,JavaScript,jQuery,Ajaxdocument.write("" + "分割好的数组是:" + arr + "");//HTML,CSS,JavaScript,jQuery,Ajaxdocument.write("" + "数组的第1个元素是:" + arr[0] + "");//HTMLdocument.write("" + "数组的第2个元素是:" + arr[1] + "");//CSSdocument.write("" + "数组的第3个元素是:" + arr[2] + "");//JavaScriptdocument.write("" + "数组的第4个元素是:" + arr[3] + "");//jQuerydocument.write("" + "数组的第5个元素是:" + arr[4] + "");//Ajax
方法二:利用for循环遍历数组来实现
//自定义一个输出函数function output(){ for (var i = 0; i < arr.length; i++) { document.write("" + "数组第" + (i+1) + "个元素是:" + arr[i] + ""); }}
分析:
(1)str.split(",")
表示用英文逗号作为分隔符来分割字符串。
["HTML","CSS","JavaScript","jQuery","Ajax"]
。 (3)然后将此数组赋值给变量arr
,并输出数组的每一个元素。 举例2:
str.split(" ")
有空格,用空格来分割字符串。 var str = "I love you";var arr = str.split(" ");document.write("" + "待分割的字符串是:" + str + "");//I love youdocument.write("" + "分割好的数组是:" + arr + "");//I,love,yououtput();/*数组第1个元素是:I数组第2个元素是:love数组第3个元素是:you*/
分析:
(1)str.split(" ")
是一个带有1个字符的字符串,因为双引号里面包含一个空格。
像下面这样肯定是不行的:
var str = "I,love,you"; var arr = str.split(" ");
此处应该使用str.split(",")
,否则只会分隔出来一个字符"I,love,you"
,其他两个数组元素的值都为undefined
。
原因:
因为原字符串中是使用英文逗号分隔的,不能乱用。split("")
无空格,它会分割字符串中的每一个字符。
var str = "I love you";var arr = str.split("");document.write("" + "待分割的字符串是:" + str + "");//I love youdocument.write("" + "分割好的数组是:" + arr + "");//I, ,l,o,v,e, ,y,o,uoutput();/*数组第1个元素是:I数组第2个元素是: 数组第3个元素是:l数组第4个元素是:o数组第5个元素是:v数组第6个元素是:e数组第7个元素是: 数组第8个元素是:y数组第9个元素是:o数组第10个元素是:u*/
分析:
(1)str.split("")
是一个不带有任何字符的字符串,因为双引号之间什么都没有。
注意:
str.split("")
与是不一样的str.split(" ")
!!!
str.split(" ")
是用空格来分割字符串。
【get到很实用的一个技巧】:str.split("")
方法可以用来分割字符串中的每一个字符。
举例3:
附带参数的split()
方法
var str = "2018/1/8/13/23/16";var arr = str.split("/",3);document.write("" + "待分割的字符串是:" + str + "");//2018/1/8/13/23/16document.write("" + "分割好的数组是:" + arr + "");//2018,1,8output();/*数组第1个元素是:2018数组第2个元素是:1数组第3个元素是:8*/
我们希望同时按照斜线“/”
和冒号“:”
对字符串进行分割。
var str = "2018/1/8/13:23:16";document.write("" + "待分割的字符串是:" + str + "");//2018/1/8/13:23:16/*隐式定义的正则表达式开头和结尾都必须是斜杠“/”。*/var arr = str.split(/[/,:]/); /*[]是正则表达式的范围类,它是闭区间。指的是里面的任何一个值出现都会选中,相当于“或”。*/或者 var arr = str.split(/\/|:/);//1.正则表达式的文本写在"/"与"/"之间,所以"/"是特殊值,需要转义//2.正则表达式中的转义字符为"\","\/"表示将"/"转化为了普通的字符//3.中间的"|"是正则表达式的选择符,表示“或”。document.write("" + "分割好的数组是:" + arr + "");//2018,1,8,13,23,16output();/*数组第1个元素是:2018数组第2个元素是:1数组第3个元素是:8数组第4个元素是:13数组第5个元素是:23数组第6个元素是:16*/
分析:
(1)因为"/"
是正则表达式的特殊符号,因此必须在"/"
前面加上“\”
对其进行转义,即"\/"
。
"\/"
表示将"/"
这个特殊符号,转换为了普通字符。例如:要匹配字面意义的“\”
,就需要使用“\\”
表示。 (2)只有学习了字符串对象和数组对象,才能很好地掌握split()
方法。 (3)join()
方法一般都是配合字符串的split()
方法来使用的。 注意:
(1)隐式定义的正则表达式开头和结尾都必须是斜杠"/"
。
“\”
将其进行转义。 (3)在正则表达式中,选择符是“|”
,用于选择2个匹配选项之中的任意一个,类似JavaScript
中的“或”
运算。 在JavaScript中,我们可以使用indexOf()
方法来找出“某个指定字符串”在字符串中“第一次”出现的下标位置。
lastIndexOf()
方法来找出“某个指定字符串”在字符串中“最后一次出现”的下标位置。 语法:
字符串名.indexOf(指定字符串);字符串名.lastIndexOf(指定字符串);
说明:
(1)如果所要检索的字符串中包含“指定的字符串”,indexOf()
和lastIndexOf()
方法就会返回指定字符串出现的位置信息(以下标的形式返回)。 (2)如果不包含“指定的字符串”,则返回-1
。 举例1:indexOf()方法
var str = "hello world!";document.write("" + "待检索的字符串是:" + str + "");//hello world!document.write("" + "检索字符串\“hello\”所在的位置:" + str.indexOf("hello") + "");//0document.write("" + "检索字符串\“world\”所在的位置:" + str.indexOf("world") + "");//6document.write("" + "错误检索示范\“World\”所在的位置:" + str.indexOf("World") + "");//-1document.write("" + "错误检索示范\“worlde\”所在的位置:" + str.indexOf("worlde") + "");//-1
分析:
(1)因为双引号在JavaScript
中有特殊的作用,所以要显示普通意义的双引号必须用转义字符("\")
进行转义。 (2)特别注意一下,str
包含"world"
,并不包含"worlde"
。 (3)在实际开发中,indexOf()
用的非常多,我们要重点掌握。 举例2:lastIndexOf()方法
var str = "how are you? I'm fine,thanks.And you?";document.write("" + "待检索的字符串是:" + str + "");//how are you? I'm fine,thanks.And you?document.write("" + "检索字符串\“you\”最后出现的位置:" + str.lastIndexOf("you") + "");//33
ps:
(1)JavaScript
还为我们提供了这两种用于检索字符串的方法:match()
和search()
。 (2)不过这三种方法大同小异,只需掌握indexOf()
就可以了,其他两个不用记。 (3)indexOf()
和lastIndexOf()
方法还可以用来检索单个字符。 举例3:检索单个字符
var str = "hello world!";document.write("" + "待检索的字符串是:" + str + "");//hello world!document.write("" + "检索字符\“o\”首次出现的位置:" + str.indexOf("o") + "");//4document.write("" + "检索字符\“o\”最后出现的位置:" + str.lastIndexOf("o") + "");//7
训练1:删除字符串中的某一个字符
方法一:replace()var str = "heallo woarld!";document.write("" + "待删除的字符串是:" + str + "");//heallo woarld!document.write("" + "使用replace()方法替换后的字符串是:" + str.replace(/a/g,"") + "");//hello world!
方法二:charAt()var result = "";for (var i = 0; i < str.length; i++) { if(str.charAt(i) != "a"){ result += str.charAt(i); }}document.write("" + "找出字符串中所有非“a”的字符输出:" + result + "");//hello world!
训练2:找出字符串中的某一个字符或字符串的数量
方法一:使用replace()方法替换掉w/W,并计算替换前后的字符串长度的差值即可var str = "Where there is a will there is a way";var rep = str.replace(/w|W/g,"");var num = str.length - rep.length;document.write("" + "待查找的字符串是:" + str + "");//Where there is a will there is a waydocument.write("" + "字符串中字符“w”的个数为:(不区分大小写)" + num +"");//3
方法二:统一转换为小写字母后依次判断字符c的个数var n = 0;for (var i = 0; i < str.length; i++) { //将整个字符串转换为小写 var char = str.toLowerCase(); //然后依次判断每一个字符是否和“w”相等 if(char.charAt(i) == "w"){ n += 1; }}document.write("" + "字符串中含有" + n + "个字符w" + "");//字符串中含有3个字符w
训练3:统计字符串中数字的个数
方法一:var str = "5l2o0v1e3y1o4u";var n = 0;for (var i = 0; i < str.length; i++) { var char = str.charAt(i); //isNaN()用来判断一个值是否是非数值,如果是该值数字的话就返回false //此处我们需要获得数字,所以必须给false加非才行,即!false if (!isNaN(char)){ n += 1; }}document.write("" + "待统计的字符串是:" + str + "");//5l2o0v1e3y1o4udocument.write("" + "该字符串中的数字个数为:" + n + "");//7
分析:
(1)isNaN()
用来判断一个值是否是非数值,如果该值是数字的话就返回false
。 (2)此处我们需要判断数字的个数,所以当该字符为数字时,必须让条件判断返回true
,然后让n+1
。 (3)所以,此时必须给false
加!
才行,if(true)
就说明该字符为数字。即!false == true
。 方法二:利用isNaN()方法来判断一个值是否为非数值(Not a Number)。function getNum(str){ var n = 0; for (var i = 0; i < str.length; i++) { var char = str.charAt(i); if (!isNaN(char)){ n += 1; } } return n;}document.write("" + getNum("5l2o 0v1e3y1o4u") + "");//8
问题: 为什么结果会是8呢?很明显只有7个数字,5201314,第8个数字是谁?
分析:
(1)isNaN()
方法会对空格字符自动转换为0
,所以必须在if
条件语句中加个非空的判断。
if( !isNaN(char) && char != " " )
。 (2)isNaN(" ")
方法认为空格不是非法数字,所以返回为false
, false == 0
。