![JavaScript从入门到精通(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/93/27738093/b_27738093.jpg)
6.1 String对象
字符串是程序设计中经常用到的一种数据类型。在JavaScript中,使用String对象可以对字符串进行处理。
6.1.1 String对象的创建
String对象是动态对象,使用构造函数可以显式创建字符串对象。String对象用于操作和处理文本串,通过它可以获取字符串的长度,提取子字符串,以及将字符串转换为大写或小写字符。
语法格式:
var newstr=new String(StringText)
参数说明:
newstr:创建的String对象名。
StringText:可选项,表示字符串文本。
例如,创建一个String对象,代码如下:
var newstr=new String("欢迎使用JavaScript脚本")
实际上,JavaScript会自动在字符串与字符串对象之间进行转换,因此,任何一个字符串常量(用单引号或双引号括起来的字符串)都可以看作是一个String对象,可以将其直接作为对象来使用。只要在字符变量的后面加“.”,便可以直接调用String对象的属性和方法。字符串与String对象的不同之处在于返回的typeof值,前者返回的是string类型,后者返回的是object类型。
6.1.2 String对象的属性
在String对象中有3个属性,分别是length、constructor和prototype。下面对这几个属性进行详细介绍。
1.length属性
length属性用于获得当前字符串的长度。该字符串的长度为字符串中所有字符的个数,而不是字节数(一个英文字符占一个字节,一个中文字符占两个字节)。
语法格式:
stringObject.length
参数说明:
stringObject:当前获取长度的String对象名,也可以是字符变量名。
说明
通过length属性返回的字符串长度包括字符串中的空格。
例如,获取已创建的字符串对象newString的长度。代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P145_71615.jpg?sign=1739149997-75QUgQSS9ympIuSmIUoTTZDM64h8ulCL-0-b23e59c54628d2ce158a87583ee53d12)
运行结果:
7
例如,获取自定义的字符变量newStr的长度。代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P145_71616.jpg?sign=1739149997-evIu4vR5zK8AOwtRzSXOojmSZGhnBEub-0-2e352cd643eb420ac90fb8b59215dabd)
运行结果:
7
【例6.1】 获取字符串变量和字符串对象的长度。(实例位置:资源包\TM\sl\6\01)
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P145_71617.jpg?sign=1739149997-sQQ5g5ebZZdbiVogB5rVAGiP10RVleah-0-17d6d6f5b2f66790d47b5316d715f1c7)
运行结果如图6.1所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P146_20261.jpg?sign=1739149997-yQeeNT9vWMQi9fCqbHc97JZxm5n2daMm-0-d08776ceb52c2bcb267adc0992b30c65)
图6.1 输出字符串的长度
2.constructor属性
constructor属性用于引用当前对象的构造函数。
语法格式:
stringObject.constructor
参数说明:
stringObject:String对象名或字符变量名。
例如,使用constructor属性判断当前对象的类型。代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P145_71618.jpg?sign=1739149997-uqncOI7kRpWU1qVbWLjRH8jk9yx8sAT9-0-a5146f3b8c2da528561f5073f2ba010f)
运行结果如图6.2所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P146_20262.jpg?sign=1739149997-dnzZWXfcNPsVYAHlc5ybGg04PRNRIkhZ-0-a0603fd6285afe330a81fe2c498dd437)
图6.2 输出对象的类型
说明
以上例子中的newStr对象,可以用字符串变量代替。该属性是一个公共属性,在Array、Date、Boolean和Number对象中都可以调用该属性,用法与String对象相同。
3.prototype属性
prototype属性可以为字符串对象添加自定义的属性或方法。
语法格式:
String.prototype.name=value
参数说明:
name:要添加的属性名或方法名。
value:添加属性的值或执行方法的函数。
例如,给String对象添加一个自定义方法getLength,通过该方法获取字符串的长度。代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P146_71620.jpg?sign=1739149997-fj7yTZwl4omZPrG3rbb4RWs3zIgm31bM-0-887f68a4aa8abd0263e090f2f8762b45)
运行结果如图6.3所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P146_20313.jpg?sign=1739149997-9AUGHE2s652XfMEkXXVZddYLoDNkgeYU-0-aa34da4cb41d46d3e54626bb865f7536)
图6.3 输出字符串的长度
6.1.3 String对象的方法
在String对象中提供了很多处理字符串的方法,通过这些方法可以对字符串进行查找、截取、大小写转换以及格式化等操作。下面分别对这些方法进行详细介绍。
1.查找字符串
字符串对象中提供了很多用于查找字符串中字符或子字符串的方法。
(1)charAt()方法
charAt()方法可以返回字符串中指定位置的字符。
语法格式:
stringObject.charAt(index)
参数说明:
stringObject:String对象名或字符变量名。
index:必选参数,表示字符串中某个位置的数字,即字符在字符串中的下标。
说明
字符串中第一个字符的下标是0,因此,index参数的取值范围是0~string.length-1。如果参数index超出了这个范围,则返回一个空字符串。
例如,在字符串“你好JavaScript”中返回下标为1的字符,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P147_71621.jpg?sign=1739149997-vWlhUOIgMg2cV0ItgVMcbaNtCIecAxSS-0-dc236680b47d6006a64c40b2667f09ae)
运行结果:
好
(2)indexOf()方法
indexOf()方法可以返回某个子字符串在字符串中首次出现的位置。
语法格式:
stringObject.indexOf(substring,startindex)
参数说明:
stringObject:String对象名或字符变量名。
substring:必选参数,要在字符串中查找的子字符串。
startindex:可选参数,用于指定在字符串中开始查找的位置,取值范围是0~stringObject.length-1。如果省略该参数,则从字符串的首字符开始查找。如果要查找的子字符串没有出现,则返回-1。
例如,在字符串“你好JavaScript”中进行不同的检索,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P148_72775.jpg?sign=1739149997-3QTVXFYVtmqBDJQnCgFkpXt2Wn642J2W-0-ad24f308266d2aef53813c80ff96cab0)
运行结果:
3 5 -1
【例6.2】 获取指定字符在字符串中出现的次数。(实例位置:资源包\TM\sl\6\02)
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P148_72780.jpg?sign=1739149997-Aje7opL6Ei3B5c4W5hO8lNFF5lkUtDTR-0-a95cd3b1b4b211505b316b2b9b84d6c9)
运行结果如图6.4所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P148_72764.jpg?sign=1739149997-cRfiEFwa5ftYTNG1e9k1uZoW24LeCah5-0-62e489162e979038244414d6c70c54d4)
图6.4 获取指定字符出现的次数
(3)lastIndexOf()方法
lastIndexOf()方法可以返回某个子字符串在字符串中最后出现的位置。
语法格式:
stringObject.lastIndexOf(substring,startindex)
参数说明:
stringObject:String对象名或字符变量名。
substring:必选参数,要在字符串中查找的子字符串。
startindex:可选参数,用于指定在字符串中开始查找的位置,在这个位置从后向前查找。它的取值范围是0~stringObject.length-1。如果省略该参数,则从字符串的最后一个字符开始查找。如果要查找的子字符串没有出现,则返回-1。
例如,在字符串“你好JavaScript”中进行不同的检索,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P149_71625.jpg?sign=1739149997-BOAgUZKEHrCViPkBDqwtnAtISHNFOOlN-0-a26f32596b4ff9289d0fa119f0e0c75a)
运行结果:
5 3 -1
2.截取字符串
(1)slice()方法
slice()方法可以提取字符串的片段,并在新的字符串中返回被提取的部分。
语法格式:
stringObject.slice(startindex,endindex)
参数说明:
stringObject:String对象名或字符变量名。
startindex:必选参数,用于指定要提取的字符串片段的开始位置。该参数可以是负数,如果是负数,则从字符串的尾部开始算起。也就是说,-1指字符串的最后一个字符,-2指倒数第二个字符,以此类推。
endindex:可选参数,用于指定要提取的字符串片段的结束位置。如果省略该参数,表示结束位置为字符串的最后一个字符。如果该参数是负数,则从字符串的尾部开始算起。
例如,在字符串“你好JavaScript”中提取子字符串,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P149_71627.jpg?sign=1739149997-xQHHTDmOWTj9eq8wGiBRVT7OuHpJ6nmN-0-f734807fcc95aff5392123d961b0c473)
运行结果:
JavaScript Java 你好Java
(2)substr()方法
substr()方法可以从字符串的指定位置开始提取指定长度的子字符串。
语法格式:
stringObject.substr(startindex,length)
参数说明:
stringObject:String对象名或字符变量名。
startindex:必选参数,用于指定要提取的字符串片段的开始位置。该参数可以是负数,如果是负数,则从字符串的尾部开始算起。
length:可选参数,用于指定提取的子字符串的长度。如果省略该参数,表示结束位置为字符串的最后一个字符。
例如,在字符串“你好JavaScript”中提取指定个数的字符,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P150_71629.jpg?sign=1739149997-ETK9JCWYJLehPbecGQejBSCL3De2pzkX-0-d4e3c0f1450635cac070a7f9db411037)
运行结果:
JavaScript Java
【例6.3】 在开发Web程序时,为了保持整个页面的合理布局,经常需要对一些超长输出的字符串内容(如公告标题、公告内容、文章标题、文章内容等)进行截取,并通过“…”代替省略内容。本实例将应用substr()方法截取超长字符串。(实例位置:资源包\TM\sl\6\03)
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P150_71631.jpg?sign=1739149997-YJXRdbtmTVXSDSVEPioRSc5Q4pd7WDwT-0-ebf564c271da030b18a4eb8215d8dc0f)
运行结果如图6.5所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P150_20693.jpg?sign=1739149997-LcmPzTXD4Bk41JPYCdtjkyzts6BjNARM-0-fcad85a764dfd1f0338cce32b0b911ad)
图6.5 输出字符串的长度
(3)substring()方法
substring()方法用于提取字符串中两个指定的索引号之间的字符。
语法格式:
stringObject.substring(startindex,endindex)
参数说明:
stringObject:String对象名或字符变量名。
startindex:必选参数。一个非负整数,指定要提取的字符串片段的开始位置。
endindex:可选参数。一个非负整数,指定要提取的字符串片段的结束位置。如果省略该参数,表示结束位置为字符串的最后一个字符。
说明
①使用substring()方法提取的字符串片段中,不包括endindex下标所对应的字符。
②如果参数startindex与endindex相等,那么该方法返回的是一个空字符串。如果startindex比endindex大,那么JavaScript会自动交换这两个参数值。
例如,在字符串“你好JavaScript”中提取子字符串,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P151_71632.jpg?sign=1739149997-manbYSlMMXLMQC5oLqfNNtN6zKKblVjg-0-44e265f96b80e9d700c03b0a873080de)
运行结果:
JavaScript Java Ja
3.大小写转换
(1)toLowerCase()方法
toLowerCase()方法用于把字符串转换为小写。
语法格式:
stringObject.toLowerCase()
参数说明:
stringObject:String对象名或字符变量名。
例如,将字符串“你好JavaScript”中的大写字母转换为小写,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P151_71634.jpg?sign=1739149997-OBKb33LUAYk49cM3P8rj47OYLFc4fyvz-0-48da6ff0cfe32997d9bf494247e3f607)
运行结果:
你好javascript
(2)toUpperCase()方法
toUpperCase()方法用于把字符串转换为大写。
语法格式:
stringObject.toUpperCase()
参数说明:
stringObject:String对象名或字符变量名。
例如,将字符串“你好JavaScript”中的小写字母转换为大写,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P152_71635.jpg?sign=1739149997-4YaBKPclAlpbNKZAZPP3AvMMGjcekFLy-0-68415d25acaa6ca64af7b974dc5684d3)
运行结果:
你好JAVASCRIPT
4.连接和拆分
(1)concat()方法
concat()方法用于连接两个或多个字符串。
语法格式:
stringObject.concat(string1,string2,…)
参数说明:
stringObject:String对象名或字符变量名。
string:必选参数,表示将被连接的字符串,可以是一个或多个。
例如,定义两个字符串,然后应用concat()方法对两个字符串进行连接。代码如下:
var str1="你好"; var str2="JavaScript"; document.write(str1.concat(str2));
运行结果:
你好JavaScript
(2)split()方法
split()方法用于把一个字符串分割成字符串数组。
语法格式:
stringObject.split(separator,limit)
参数说明:
stringObject:String对象名或字符变量名。
separator:必选参数,用于指定分割符。该参数可以是字符串,也可以是正则表达式。如果把空字符串("")作为分割符,那么字符串对象中的每个字符都会被分割。
limit:可选参数,用于指定返回数组的最大长度。如果设置了该参数,返回的数组元素个数不会多于这个参数。如果省略该参数,整个字符串都会被分割,不考虑数组元素的个数。
例如,将字符串“I like JavaScript”按照不同方式进行分割,代码如下:
var str="I like JavaScript"; document.write(str.split(" ")+"<br>"); document.write(str.split("")+"<br>"); document.write(str.split(" ",2));
运行结果:
I,like,JavaScript I, ,l,i,k,e, ,J,a,v,a,S,c,r,i,p,t I,like
【例6.4】 对字符串以指定分隔符进行拆分,再将字符串数组中的内容以另一个分隔符进行连接,从而组合成一个新的字符串。(实例位置:资源包\TM\sl\6\04)
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P153_71639.jpg?sign=1739149997-dlSLH3kjti6urT6kOMciS99fwHuCV9rD-0-8bce0d1f02ff2761b05e82b0530d8a71)
运行结果如图6.6所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P153_21075.jpg?sign=1739149997-Cx8Fulq5nSvvprkrSxBsvCPhZkj0rLaj-0-010c4175928891ac3f86e825895e20d8)
图6.6 分割合成字符串
【例6.5】 在开发网络应用程序时,经常会遇到由系统自动生成指定位数的随机字符串的情况,例如,生成随机密码或验证码等。本实例将实现生成指定位数的随机字符串的功能。(实例位置:资源包\TM\sl\6\05)
实现步骤如下:
(1)在页面中创建表单,在表单中添加一个用于输入生成随机字符串位数的文本框和一个“生成”按钮,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P153_71640.jpg?sign=1739149997-I7ZJgN0wf0piWt1SuwEAZIO0g3czPGY2-0-ab1fd3b8cd8d05e7fc6fbb8254c2be10)
(2)编写随机生成指定位数的字符串的函数ranStr()。该函数只有一个参数digit,用于指定生成的随机字符串的位数,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P153_71641.jpg?sign=1739149997-869k05Rc4FLg9G088dn9cEqTKIypKN2s-0-03c5cb66abe8579d8409cd5d6d906221)
(3)在“生成”按钮的onClick事件中调用ranStr()函数生成随机字符串,代码如下:
<input type="button" value="生成" onClick="ranStr(form.digit.value)"/>
运行结果如图6.7所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P154_21092.jpg?sign=1739149997-CZfvO5cJY0LJCOFuztGoch76aEe9SmM0-0-2f4c2d368cb2d4391dc31050a4f805d6)
图6.7 生成随机字符串
5.格式化字符串
在字符串对象中还有一些用来格式化字符串的方法,这些方法如表6.1所示。
表6.1 String对象中格式化字符串的方法
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-T154_71642.jpg?sign=1739149997-AY6Gq5L81Vq3agj1EocWFYJqlwQDCm8E-0-7e9dcf5f5544ddfa318d2ca5e0389280)
例如,将字符串“你好JavaScript”按照不同的格式进行输出,代码如下:
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P154_71643.jpg?sign=1739149997-2DqDxZ7ktESpZ7BFt8VglSmFZXB2jTgu-0-3f2655f6180b13dcbb0d431ad59668db)
运行结果如图6.8所示。
![](https://epubservercos.yuewen.com/23D367/15936052205027606/epubprivate/OEBPS/Images/Figure-P155_21277.jpg?sign=1739149997-WjUPyBWy5txF7QNnuNC6D8g3NwSZwLAA-0-0b4e32577a298b7a0ad20d89d9603a29)
图6.8 对字符串进行格式化