JavaScript从入门到精通(第3版)
上QQ阅读APP看书,第一时间看更新

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 对字符串进行格式化