序列 | 所代表的字符 |
\0 | NULL字符 |
\b | 退格符 |
\t | 水平制表符 |
\n | 换行符 |
\v | 垂直制表符 |
\f | 换页符 |
\r | 回车符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜线 |
\uXX | 由两位十六进制数值XX指定的Latin-1字符 |
\uXXXX | 由四位十六进制数值XXXX指定的Unicode字符 |
\XXX | 由一位到三位八进制数指定的Latin-1字符。ECMAScript v3不支持,不推荐使用 |
9.1.3字符串构造函数
JavaScript提供了字符串构造函数String(),String()是JavaScript的核心对象之一,它接受一个参数作为字符串的初始值。但我们通常不用它来构造字符串。
注意,String构造的字符串和字符串常量不同,字符串常量的类型是基本数据类型string,而String()的类型是对象object。
- <script>
- var str = new String("abc");
- var str2 = "abc";
- alert(str==str2);//true
- alert("typeof str:" + typeof str);//object
- alert("typeof str2:" + typeof str2);//string
- </script>
String应当看作是字符串基本类型的包装类。另外,同其他的包装类相似,String()也可以作为普通函数来调用,此时它只将传递给它的第一个参数转换成字符串类型返回。
String方法返回类型.html
- <script>
- console.log(typeof String("字符串"));
- </script>
运行结果如下:
string |
9.2字符串的使用
9.2.1比较字符串
JavaScript定义了字符串比较运算。在JavaScript中对字符串的比较是严格地逐字符进行比较的。比较的依据是每个字符的Unicode编码。一个字符串a大于另一个字符串b,当且仅当字符串a的某一位字符的Unicode编码大于b相应位字符的Unicode编码或者b相应位字符不存在,并且a在这一位之前的任何一位字符的Unicode编码均不小于b相应位的字符编码。反之,一个字符串a小于另一个字符串b,当且仅当字符串a的某一位字符的Unicode编码小于b相应位字符的Unicode编码或者a相应位字符不存在,并且a在这一位之前的任何一位字符的Unicode编码均不大于b相应位的字符编码。一个字符串a等于另一个字符串b,当且仅当它们的字符数目完全相同并且相应位字符的Unicode编码也完全相同。
- <script>
- alert("string" == "string"); //相等
- alert("string" == "string "); //不等,等式右端比左端多出一个空格
- </script>
9.2.2抽取和检索子串
String对象的charAt方法和charCodeAt方法用来抽取字符串指定位置的字符。它们的唯一参数指定了该字符的位置。两个方法的区别是,charAt方法返回的是指定位置上的字符,而charCodeAt方法返回的是该字符的Unicode编码。如果指定位置的字符不存在,charAt方法返回空字符串"",而charCodeAt方法返回NaN。
- <script>
- var str = " sdfg\nd"; //注意str前面的第一个字符是空格
- alert(str.charCodeAt(5)); //得到10,回车\n的Unicode编码是10
- alert(str.charAt(3));//得到f
- alert(str.charCodeAt(9));//指定位置的字符不存在,得到NaN
- alert(str.charAt(9)); //指定位置的字符不存在,得到“”
- </script>
String对象的indexOf方法和lastIndexOf方法用来在字符串中检索一个字符或一个子串,如果该字符或子串存在,indexOf返回它第一次出现在字符串中的位置,这个位置是用一个从0开始的数值来表示的。
lastIndexOf方法和indexOf方法的区别是它查询的字符串的顺序是从字符串末尾开始朝前的。
如果被检索的字符或者子串在字符串中不存在,indexOf方法和lastIndexOf方法都返回数值-1。
- <script>
- var str = " sdfg\nd";
- alert(str.indexOf("d")); //得到2,因为从左到右的第一个d是第3个字符(牢记index下标从0开始)
- alert(str.lastIndexOf("d"));//得到6,因为从右往左的第一个d是第7个字符
- alert(str.indexOf("w"));//-1
- alert(str.lastIndexOf("w"));//-1
- </script>
String对象的substring方法和slice方法用来抽取字符串的子串。这两个方法非常类似,都接受两个数值作为参数,这两个数值分别指定了子串的起止位置。返回字符串由起始位置开始直到终止位置(不包括终止位置)的字符构成的子串。二者的区别是,slice接受负数值作为参数,这时候相对位置从字符串的末尾开始计算而不是从字符串头开始计算。如果slice的参数表示的起始位置大于终止位置,那么它的返回值是一个空串,但是如果substring的第一个参数大于第二个参数,它在抽取子串前会先交换这两个参数的值。
- <script>
- var str = "1234567";
- console.log("slice正常的参数:" + str.slice(2,5)); //得到345
- console.log("slice参数都是负数的时候:" + str.slice(-5,-2));//得到345 字符串的最后一个字符是-1
- console.log("slice第一个参数是负数,即使截取也没有任何内容:" + str.slice(-5,2));
- console.log("slice有一个参数是负数,但是如果截取的话是可以正常截取到的:" + str.slice(1,-5));
- console.log("slice第一个参数大于第二个参数:" + str.slice(5,1));
- console.log("slice第一个参数大于第二个参数:" + str.slice(-1,-5));
- console.log("substring正常的参数:" + str.substring(2,5)); //同样得到345
- console.log("substring第一个参数大于第二个参数:" + str.substring(5,2)); //同样得到345
- console.log("substring两个参数都是负数(第一个参数大于第二个参数):" + str.substring(-2,-5));
- console.log("substring如果两个数都是负数,则结果是空:" + str.substring(-5,-2)); //得到空
- console.log("substring如果有一个数是负数,则该数相当于0:" + str.substring(-5,2)); //得到12
- console.log("substring如果有一个数是负数,则该数相当于0:" + str.substring(2,-5)); //得到12
- </script>
String的slice方法和Array的slice方法非常想似。
9.2.3连接拆分字符串
String对象的split方法可以用来拆分字符串。它接受一个字符串或正则表达式参数作为分割符,返回被这个分割符分割之后的字符串数组。split方法的第二参数指定了分割后字符串数组的最大长度,大于这个长度的子串将被舍弃。如果默认这个参数,则不舍其任何子串。
- <script>
- var a = "1234.56.789.123123123123".split(".",3);
- alert(a);
- </script>
字符串的连接可以通过运算符“+”,也可以通过数组的join方法。
- <script>
- var a ="123456789".split("");
- a.reverse();
- alert(a);
- alert(a.join(""));
- </script>
第三种字符串连接的方法是字符串的concat方法,它和数组的concat方法是类似的,只不过参数为多个字符串,concat方法将它们依次连接到字符串的末尾。注意,同数组的concat方法一样,字符串的concat方法并不修改字符串本身的值。
- <script>
- alert("".concat("Hello,","51js","."));
- </script>
9.2.4 字符串的模式匹配——一个字符串格式校验的例子
- <html>
- <head>
- <title>Example-9.1</title>
- </head>
- <body>
- <script>
- <!--
- function dwn(s){
- document.write(s + "<br/>");
- }
- //检查一段字符串是否全由数字组成
- function checkNum(str){
- //Match是常用的字符串匹配方法,它的参数是模式,这里是用正则表达式/\D/来描述
- //模式非数值
- return str.match(/\D/) == null;
- }
- dwn(checkNum("1232142141"));//true
- dwn(checkNum("123214214a1")); //false
- //查询包含Script的脚本
- function searchScript(str){
- //search是另一种模式匹配方法,它检索字符串中的子串,返回符合模式的子串位置
- //如果没有子串和模式相匹配,它返回-1
- if(str.search(/Script/i) == -1){
- dwn("String not found");
- }else{
- dwn("String found.");
- }
- }
- searchScript("javascript"); //String found
- searchScript("51js"); //String not found
- //匹配包含Script的脚本
- function matchScript(str){
- var matchArray = str.match(/Script/gi);
- for(var i = 0; i < matchArray.length;i++){
- dwn("Match found: " + matchArray[i]);
- }
- }
- matchScript("JavaScript & VBScript");//这个字符串被匹配到了两个/Script/gi
- matchScript("51js"); //这个字符串没有匹配到/Script/gi
- -->
- </script>
- </body>
- </html>
9.2.5其他方法
String.fromCharAt
它的参数是一个代表Unicode编码的数值,返回由这个编码对应的Unicode字符构成的字符串。
toLowerCase
这个方法返回一个字符串中所有字符转换成小写形式后的字符串。
toUpperCase
这个方法返回一个字符串中所有字符转换成大写形式后的字符串。
toString valueOf
9.3 字符串与字符数组
字符串操作函数split能够用分割符分割字符串,分割后的结果为数组。如果以带空字符串参数“”的split分割字符串,则结果将得到一个数组,这个数组的每一个元素分别是对应的字符串中的字符,这个数组被称为字符数组。对应地,执行数组的join方法,能够将数组元素连接成字符串,如果用空字符串“”调用它,则可以将字符数组还原为字符串。
11111