javaScript基础之——字符串 字符串方法javascript
程序员文章站
2022-06-09 12:40:03
...
字符串类型是JavaScript的一种基本数据类型,是字符串的对象包装类型。
String类(对象类型)提供(定义)了大量操作原始字符串值的方法, 例如从字符串中提取字符或子串,或者检索字符或子串。注意,JavaScript的字符串是不可变(immutable)的,String类定义的方法都不能改变字符串的内容。像String.toUpperCase()这样的方法,返回的是全新的字符串,而不是修改原始字符串
length属性
String类型的每个实例都有一个length属性,表示字符串中包含的字符数。值得注意的是,即使字符串中包含双字节字符,每个字符也仍然算一个字符。
String.length是一个只读整数,对于任何一个字符串,它最后一个字符的下标都是s.1ength-1。用for/in循环不能枚举出字符串的length属性,用delete运算符也不能删除它。
常用方法
字符方法
string.charAt()
string.charCodeAt()
//返回字符串中指定位置的字符或者字符编码
string.charAt( n ) --- 返回字符串中的第n个字符
参数:n是应该返回的字符在string中的下标
功能:方法charAt()将返回字符串string中的第n个字符。字符串中第一个字符的下标值是0。如果参数n不在0和string.length-1之间,该方法将返回一个空字符串。这个方法返回的字符长度只能是0或1。
返回值:字符串string的第n个字符。
Bug:使用方括号表示法访问个别字符的语法得到了IE8及Firefox、safari、chrome和opera所有版本的支持。如果是在IE7及更早版本中使用这种语法,会返回undefined值。
string.charCodeAt( n )--- 返回字符串中的第n个字符的字符编码
参数:n是应该返回的字符编码在string中的下标
功能:方法charCodeAt()将返回字符串string中的第n个字符的Unicode编码。它与charAt()方法执行的操作相似,只不过charAt()返回的是位于指定位置的字符本身,而charCodeAt()返回的是字符的编码。如果参数n不在0和string.length-1之间,该方法将返回NaN。
返回值:字符串string的第n个字符的Unicode编码。这个返回值是0~65535之间的16位整数。
Bug:JavaScript 1.2 对16位Unicode字符和字符串没有提供完全的支持。
string.fromCharCode( c1,c2,… )--- 从字符编码创建一个字符串
参数:零个或多个整数,声明了要创建的字符串中的字符的Unicode编码。
功能:这个静态方法提供了一种创建字符串的方式,即字符串中的每个字符都由单独的数字Unicode编码指定。注意,作为一种静态方法,fromCharCode()是构造函数String()的属性,而不是字符串或String对象的方法。
返回值:含有指定编码的字符的新字符串。
Bug:JavaScript 1.2 对16位Unicode字符和字符串没有提供完全的支持。
示例:
var s = String.fromCharCode(104,101,108,108,111); // "hello"
位置方法
string.indexOf()
string.lastIndexOf()
//从字符串中查找子字符串的方法
string.indexOf( substring,start ) --- 搜索给定的子串,返回子串位置
参数:substring:要在字符串string中检索的子串。start:可选的整数参数,声明了在字符串string中开始检索的位置。他的合法取值是0~length-1,如果省略了这个参数,将从字符串的第一个字符开始检索。
功能:
将从头到尾的检索字符串string,看它是否含有子串substring。
开始检索的位置在字符串string中的start处或string的开头。
如果找到了一个substring,那么返回substring在第一个字符在string中的位置。如果没找到,返回 -1。
返回值:在string中的start位置之后存在substring返回出现的第一个substring的位置。如没找到返回 -1。
Bug:在JavaScript 1.0 和 1.1中,如果start的值大于字符串string的长度,将返回一个空字符串,而不是返回-1。
string.lastIndexOf( substring,start ) --- 从后向前检索一个字符串
参数:substring:要在字符串string中检索的子串。start:可选的整数参数,声明了在字符串string中开始检索的位置。他的合法取值是0~length-1,如果省略了这个参数,将从字符串的最后一个字符开始检索。
功能:
将从尾到头的检索字符串string,看它是否含有子串substring。
开始检索的位置在字符串string中的start处或string的结尾。
如果找到了一个substring,那么返回substring的第一个字符在string中的位置。由于是从尾到头的检索一个字符串,所以找到的第一个substring其实是string中出现在位置start之前的最后一个子串。如果没找到,返回 -1。
虽然string.lastIndexOf()是从尾到头的检索字符串string,但是它返回的字符位置仍然是从头开始计算的。
返回值:如果在string中的start位置之前存在substring子串,返回最后一个substring的位置。如果没有找到,返回 -1 。
大小写转换方法
//toLowerCase()和toUpperCase()方法时两个经典的方法,借鉴自java.lang.String中的同名方法。
//toLocaleLowerCase()和toLocaleUpperCase()方法针对特定地区实现方法,少数语言会得到与上面两个方法不同的结果。
string.toLowerCase() ---将字符串转换成小写
string.toUpperCase() ---将字符串转换成大写
string.toLocaleLowerCase() ---将字符串转换成小写,按地区实现
string.toLocaleUpperCase() ---将字符串转换成大写,按地区实现
返回值:这4个方法的返回值都是string的一个副本。
字符串操作方法
//截取子串&拼接字符串
string.substr( start,length ) --- 抽取一个子串
参数:
start:要抽取的子串的起始下标,如果是负数,那么参数声明从字符串的尾部开始算起,也就是说, -1 指字符串中的最后一个字符,-2指倒数第二个字符,以此类推。
length:可选参数,子串中的字符数。如果省略了这个参数,那么返回从start到结尾的子串。
功能:将在string中抽取并返回一个子串。
返回值:一个字符串的副本,包括从start处(包含start所指字符)开始的length个字符。如果没有指定length,返回从start到末尾的字符。
Bug:IE8及以下,start不能为负值,负的start值指定的不是从字符尾部开始算起的字符位置,而是第0个字符的位置。
string.substring( start,end) --- 返回字符串的一个子串
参数:
start:要抽取的子串的起始下标。end:可选整数参数,要抽取子串在字符串string中的结束位置(不包括end位置所在的字符),如果省略,返回直到字符串string结尾位置的子串。
功能:
返回字符串string的子串,有start到end之间的字符构成。包括start的字符,不包括end的字符。
如果参数start与end相等,那么返回一个空字符。
如果start比end大,那么该方法会先交换两个参数,再抽取子串。
扩展:返回的子串包括start的字符,不包括end的字符。虽然这样看来有违直觉,但这种系统有一个值得注意的特性:返回的子串长度总等于end-start的值。
返回值:一个字符串的副本,包括从start处(包含start所指字符)到end处(不包括)的字符串。如果没有指定length,返回从start到末尾的字符。
Bug:JavaScript 1.2 中,如果start比end大,不能正确的交换两个参数的位置,而是返回空字符串。
string.slice( start,end) --- 抽取一个子串
参数:
start:要抽取的子串的起始下标,如果是负数,那么参数声明从字符串的尾部开始算起,也就是说, -1 指字符串中的最后一个字符,-2指倒数第二个字符,以此类推。
end:要抽取的片段的结尾的下标。如果没有指定end参数,那么要抽取的子串包括start到元字符串结尾的字符串。如果该参数是负数,那么它声明了从字符串的尾部开始算起的位置。
功能:将返回一个含有字符串string的片段的字符串或返回它的一个子串。
返回值:一个新字符串,包括字符串string从start开始(包括)到end为止(不包括)的所有字符。
Bug:IE4中,参数start的值不能为负,负的start值指定的不是从字符串尾部开始算起的字符位置,而是指定第0个字符的位置。
--------------------------------------以上3个截取字符串方法的总结----------------------------------
1:3个方法都返回字符串的指定部分。
2:3个方法的第一个参数都是start---表示指定字符串的开始位置。
3:3个方法的第二个参数省略的话,都返回start到结尾处的字符子串。
4:slice和substring的第二个参数代表子字符串结束的位置,而substr的第二个参数指返回的字符个数。
5:substring的start大于end的话,会交换参数再截取子串。
6:在参数为负值的情况下,
slice方法会将传入的负值与字符串的长度相加(从结尾计算位置),
substr将负的第一个参数加上字符串的长度(-同slice),而将负的第二个参数转换成0。
substring会把所有负数转换为0(此时,如果0小于第一个参数的话,还会交换2个参数的位置)
string.concat( value,…) --- 连接字符串
参数:value:要连接到string上的一个或多个值。
功能:将把它的所有参数都转换成字符串(如果必要),然后按顺序连接到字符串string的尾部,返回连接后的字符串。
返回值:把每个参数都连接到字符串string上得到的新字符串。
扩展:使用“+”运算符来进行字符串的连接运算通常更简便一些。
模式匹配方法
//相关RegExp知识,请自行参考其他资料学习
string.match( regexp ) --- 找到一个或多个正则表达式的匹配
参数:
regexp:生命了要匹配的模式的RegExp对象。如果该参数不是RegExp对象,则首先将把它传递给RegExp()构造函数,把它转化成RegExp对象。
功能:
将检索字符串string,以找到一个或多个与regexp匹配的文本。这个方法的行为很大程度上依赖于regexp是否具有全局性质g。
如果regexp具有标志g,那么match()将执行全局检索,找到string中的所有匹配子串。如果没有找到任何匹配的子串。它将返回null。如果找到了一个或多个匹配子串,它将返回一个数组。不过,全局匹配返回的数组的内容与前者大不相同,它的数组元素存放的是string中的所有匹配子串,而且它也没有index属性和input属性。注意,在全局匹配的模式下,match()既不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果你需要这些全局检索的信息,可以使用RegExp.exec()。
返回值:存放匹配结果的数组。该数组的内容依赖于regexp是否具有全局性质g。
string.search( regexp ) --- 检索与正则表达式相匹配的子串
参数:regexp:要在字符串string中检索的RegExp对象,该对象具有指定的模式。如果该参数不是RegExp对象,则首先将它传递给RegExp()构造函数,把它转换成 RegExp对象。
返回值:string中第一个与regexp相匹配的子串的起始位置。如果没有找到任何匹配的子 串,则返回-1。
功能:方法search()将在字符串string中检索与regexp相匹配的子串,并且返回第一个匹配子串的第一个字符的位置。如果没有找到任何匹配的子串,则返回-1。search()并不执行全局匹配,它将忽略标志g。它也忽略regexp的lastIndex属性,并且总是从字符串的开始进行检索,这意味着它总是返回string的第一个匹配的位置。
string.replace( regexp,replacement) --- 替换一个与正则表达式匹配的子串
参数:
regexp:声明了要替换的模式的RegExp对象。如果该参数是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换成RegExp对象。
replacement:一个字符串。声明的是替换文本或生成替换文本的函数。
返回值:一个新字符串,是用replacemenc替换了与regexp的第一次匹配或所有匹配之后得到的。
功能:
字符串string的方法replace()执行的是查找并替换的操作。它将在string中查找与regexp相匹配的子串,然后用replacement替换这些子串。如果regexp具有全局性质g,那么replace()将替换所有的匹配子串。否则,它只替换第一个匹配子串。
replacement可能是字符串或函数。如果它是一个字符串,那么每个匹配都将由字符 串替换。
ECMAScript v3规定,replace()方法的参数replacement可以是函数而不是字符串,JavaScipt 1.2和JScript 5.5实现了这一特性。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字 符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有0个或多个这样的参数。接下来参数是一个整数,声明了匹配在string中出现的位置。最后一个参数是string自身。
string.split( delimiter,limit) --- 将字符串分割成字符串数组
参数:
delimiter:字符串或正则表达式,从该参数指定的地方分割string。
limit:可选的整数,指定了返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数字。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
功能:
方法split()将创建并返回一个字符串数组,该数组中的元素是指定的字符串string 的子串,最多具有limit个。这些子串是通过从头到尾检索字符串中与delimiter 匹配的文本,在匹配文本之前和之后分割string得到的。返回的子串中不包括定界符 文本(下面提到的情况除外)。如果定界符从字符串开头开始匹配,返回的数组的第一个元素是空串,即出现在定界符之前的文本。同样,如果定界符与字符串的结尾匹 配,返回的数组的最后一个元素也是空串(假定与limit没有冲突)。
如果没有指定delimiter,那么它根本就不对string执行分割,返回的数组中只有一个元素,而不分割字符串元素。如果delimiter是一个空串或与空串匹配的正则表达式,那么string中的每个字符之间都会被分割,返回的数组的长度与字符串长度相 等(假定limic不小于该长度)。(注意,这是一种特殊情况,因为没有匹配第一个字符之前和最后一个字符之后的空串。)
前面说过,该方法返回的数组中的子串不包括用于分割字符串的定界符文本。但如果delimiter是包括子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹 配的子串(但不包括与整个正则表达式匹配的文本)。
返回值:一个字符串数组,是通过在delimiter指定的边界处将字符串string分割成子串创建的。返回的数组中的子串不包括delimiter自身。
Bug:ECMAScriptv3标准化了该参数,JavaScript 1.2和JScript 3.0实现了它。JavaScript 1.1没有实现它。在JavaScript的Netscape实现中,如果明确地把语言版本设置为1.2,split()方法具有特殊的行为,即如果delimiter 是一个空格,该方法将在空格处分割字符串,忽略字符串开头和结尾处的空白。
字符串比较方法
string.localeCompare( target) --- 用本地特定的顺序来比较两个字符串
参数:target:要以本地特定的顺序与string进行比较的字符串。
功能:
把<和>运算符应用到字符串时,它们只用字符的Unicode编码比较字符串,而不考虑当地的排序规约。以这种方法生成的顺序不一定是正确的。例如,西班牙语中,其中字母“ch”通常作为出现在字母“c”和“d”之间的字符来排序。
localeCompare()方法提供的比较字符串的方法,考虑了默认的本地排序规约。 ECMAScript标准没有规定如何进行本地特定的比较操作,它只规定该函数采用底层 操作系统提供的排序规约。
返回值:说明比较结果的数字。如果string小于target,则localeCompare()返回小于0的数。如果string大干target,该方法返回大于0的数。如果两个字符串相等,或根据本地排序规约没有区别,该方法返回0。
ECMAScript 5 增加的字符串方法
string.trim() --- 删除前置及后缀的所有空格,然后返回结果
功能:删除字符串的前后空格,并返回结果,原始字符串不变。
浏览器支持:IE9+,Firefox3.5+,Safari5+,opera10.5+,Chrome。
----除以上方法以外,还有一些html方法,不建议试用,这里也就不再罗列html方法的功能与用法-----
推荐阅读