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的长度。代码如下:
运行结果:
7
例如,获取自定义的字符变量newStr的长度。代码如下:
运行结果:
7
【例6.1】 获取字符串变量和字符串对象的长度。(实例位置:资源包\TM\sl\6\01)
运行结果如图6.1所示。
图6.1 输出字符串的长度
2.constructor属性
constructor属性用于引用当前对象的构造函数。
语法格式:
stringObject.constructor
参数说明:
stringObject:String对象名或字符变量名。
例如,使用constructor属性判断当前对象的类型。代码如下:
运行结果如图6.2所示。
图6.2 输出对象的类型
说明
以上例子中的newStr对象,可以用字符串变量代替。该属性是一个公共属性,在Array、Date、Boolean和Number对象中都可以调用该属性,用法与String对象相同。
3.prototype属性
prototype属性可以为字符串对象添加自定义的属性或方法。
语法格式:
String.prototype.name=value
参数说明:
name:要添加的属性名或方法名。
value:添加属性的值或执行方法的函数。
例如,给String对象添加一个自定义方法getLength,通过该方法获取字符串的长度。代码如下:
运行结果如图6.3所示。
图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的字符,代码如下:
运行结果:
好
(2)indexOf()方法
indexOf()方法可以返回某个子字符串在字符串中首次出现的位置。
语法格式:
stringObject.indexOf(substring,startindex)
参数说明:
stringObject:String对象名或字符变量名。
substring:必选参数,要在字符串中查找的子字符串。
startindex:可选参数,用于指定在字符串中开始查找的位置,取值范围是0~stringObject.length-1。如果省略该参数,则从字符串的首字符开始查找。如果要查找的子字符串没有出现,则返回-1。
例如,在字符串“你好JavaScript”中进行不同的检索,代码如下:
运行结果:
3 5 -1
【例6.2】 获取指定字符在字符串中出现的次数。(实例位置:资源包\TM\sl\6\02)
运行结果如图6.4所示。
图6.4 获取指定字符出现的次数
(3)lastIndexOf()方法
lastIndexOf()方法可以返回某个子字符串在字符串中最后出现的位置。
语法格式:
stringObject.lastIndexOf(substring,startindex)
参数说明:
stringObject:String对象名或字符变量名。
substring:必选参数,要在字符串中查找的子字符串。
startindex:可选参数,用于指定在字符串中开始查找的位置,在这个位置从后向前查找。它的取值范围是0~stringObject.length-1。如果省略该参数,则从字符串的最后一个字符开始查找。如果要查找的子字符串没有出现,则返回-1。
例如,在字符串“你好JavaScript”中进行不同的检索,代码如下:
运行结果:
5 3 -1
2.截取字符串
(1)slice()方法
slice()方法可以提取字符串的片段,并在新的字符串中返回被提取的部分。
语法格式:
stringObject.slice(startindex,endindex)
参数说明:
stringObject:String对象名或字符变量名。
startindex:必选参数,用于指定要提取的字符串片段的开始位置。该参数可以是负数,如果是负数,则从字符串的尾部开始算起。也就是说,-1指字符串的最后一个字符,-2指倒数第二个字符,以此类推。
endindex:可选参数,用于指定要提取的字符串片段的结束位置。如果省略该参数,表示结束位置为字符串的最后一个字符。如果该参数是负数,则从字符串的尾部开始算起。
例如,在字符串“你好JavaScript”中提取子字符串,代码如下:
运行结果:
JavaScript Java 你好Java
(2)substr()方法
substr()方法可以从字符串的指定位置开始提取指定长度的子字符串。
语法格式:
stringObject.substr(startindex,length)
参数说明:
stringObject:String对象名或字符变量名。
startindex:必选参数,用于指定要提取的字符串片段的开始位置。该参数可以是负数,如果是负数,则从字符串的尾部开始算起。
length:可选参数,用于指定提取的子字符串的长度。如果省略该参数,表示结束位置为字符串的最后一个字符。
例如,在字符串“你好JavaScript”中提取指定个数的字符,代码如下:
运行结果:
JavaScript Java
【例6.3】 在开发Web程序时,为了保持整个页面的合理布局,经常需要对一些超长输出的字符串内容(如公告标题、公告内容、文章标题、文章内容等)进行截取,并通过“…”代替省略内容。本实例将应用substr()方法截取超长字符串。(实例位置:资源包\TM\sl\6\03)
运行结果如图6.5所示。
图6.5 输出字符串的长度
(3)substring()方法
substring()方法用于提取字符串中两个指定的索引号之间的字符。
语法格式:
stringObject.substring(startindex,endindex)
参数说明:
stringObject:String对象名或字符变量名。
startindex:必选参数。一个非负整数,指定要提取的字符串片段的开始位置。
endindex:可选参数。一个非负整数,指定要提取的字符串片段的结束位置。如果省略该参数,表示结束位置为字符串的最后一个字符。
说明
①使用substring()方法提取的字符串片段中,不包括endindex下标所对应的字符。
②如果参数startindex与endindex相等,那么该方法返回的是一个空字符串。如果startindex比endindex大,那么JavaScript会自动交换这两个参数值。
例如,在字符串“你好JavaScript”中提取子字符串,代码如下:
运行结果:
JavaScript Java Ja
3.大小写转换
(1)toLowerCase()方法
toLowerCase()方法用于把字符串转换为小写。
语法格式:
stringObject.toLowerCase()
参数说明:
stringObject:String对象名或字符变量名。
例如,将字符串“你好JavaScript”中的大写字母转换为小写,代码如下:
运行结果:
你好javascript
(2)toUpperCase()方法
toUpperCase()方法用于把字符串转换为大写。
语法格式:
stringObject.toUpperCase()
参数说明:
stringObject:String对象名或字符变量名。
例如,将字符串“你好JavaScript”中的小写字母转换为大写,代码如下:
运行结果:
你好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)
运行结果如图6.6所示。
图6.6 分割合成字符串
【例6.5】 在开发网络应用程序时,经常会遇到由系统自动生成指定位数的随机字符串的情况,例如,生成随机密码或验证码等。本实例将实现生成指定位数的随机字符串的功能。(实例位置:资源包\TM\sl\6\05)
实现步骤如下:
(1)在页面中创建表单,在表单中添加一个用于输入生成随机字符串位数的文本框和一个“生成”按钮,代码如下:
(2)编写随机生成指定位数的字符串的函数ranStr()。该函数只有一个参数digit,用于指定生成的随机字符串的位数,代码如下:
(3)在“生成”按钮的onClick事件中调用ranStr()函数生成随机字符串,代码如下:
<input type="button" value="生成" onClick="ranStr(form.digit.value)"/>
运行结果如图6.7所示。
图6.7 生成随机字符串
5.格式化字符串
在字符串对象中还有一些用来格式化字符串的方法,这些方法如表6.1所示。
表6.1 String对象中格式化字符串的方法
例如,将字符串“你好JavaScript”按照不同的格式进行输出,代码如下:
运行结果如图6.8所示。
图6.8 对字符串进行格式化