JavaScript 网页编程从入门到精通 (清华社"视频大讲堂"大系·网络开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

7.1 定义字符串

定义字符串有多种方式,如字符串直接量、构造字符串和使用字符编码设计字符串,下面分别进行介绍。

7.1.1 字符串直接量

定义字符串直接量的方法很简单,使用双引号或单引号包含字符文本即可。例如:

      var s="abc";                                    //定义字符串直接量
      var s="字符串直接量";                             //定义字符串直接量

【示例1】任何字符被引号包含,都会被转换为字符串类型数据。

      var s="true";                                   //把布尔值转换为字符串直接量
      var s="123";                                    //把数值转换为字符串直接量
      var s="[1,2,3]";                                //把数组转换为字符串直接量
      var s="{x:1, y:2}";                             //把对象转换为字符串直接量
      var s="alert('Hello, World')";                  //把可执行表达式转换为字符串直接量

由于一些字符包含双重或多重语义,把它们包含在字符串中,会破坏字符串的值,甚至破坏字符串的类型,因此需要转义特殊字符,避免产生歧义。

【示例2】单引号和双引号配合使用,以应对特殊形式的字符串需要。

      var s = "alert('Hello, World')";

可以这样写:

      var s = 'alert("Hello, World")';

单引号可以包含双引号,或者双引号包含单引号。但是不能够在单引号中包含单引号,或者在双引号中包含双引号。下面写法都是错误的:

      var s='alert('Hello, World')';                         //非法的字符串
      var s="alert("Hello, World")";                         //非法的字符串

【示例3】如果要表示引号字符,需要使用转义序列来表示。

  
      var s=""";                                             //非法引号字符串
      var s="\"";                                            //有效的引号字符串

【示例4】对于字符串类型的语句或表达式,可以调用静态方法eval()来执行。

      var s="alert('Hello, World')";                         //表达式字符串
      eval(s);                                               //执行表达式字符串

7.1.2 构造字符串

String是JavaScript内置对象,调用String()构造函数可以构造字符串,该函数可以接收一个参数,并把它作为初始值来初始化字符串。

【示例1】下面的代码使用了new运算符调用String()构造函数,将创建一个字符串型对象。

      var s=new String();                             //创建一个空字符串对象,并赋值给变量s
      var s=new String("我是构造字符串");                //创建字符串对象,初始化之后赋值给变量s

注意:通过String构造函数构造的字符串与字符串直接量的类型是不同的。前者为引用型对象,后者为值类型的字符串。

【示例2】下面的代码比较了构造字符串和字符串直接量的数据类型的不同。

      var s1=new String(1);                        //构造字符串
      var s2="1";                                  //定义字符串直接量
      alert(typeof s1);                            //返回object,说明是引用型对象
      alert(typeof s2);                            //返回string,说明是值类型字符串

从上面示例可以看到,String构造函数实际上是字符串的包装类,利用它可以把值类型字符串包装为引用型对象,以适应各种字符串的特殊处理。

【示例3】String()也可以作为普通函数使用,把参数转换为字符串类型的值返回,此时它就不是构造函数了。

      var s=String(123456);                        //包装字符串
      alert(s);                                    //返回字符串"123456"
      alert(typeof s);                             //返回string,说明该方法不再是构造函数

【示例4】String()可以带有多个参数,但是它仅处理第一个参数,并把它转换为字符串返回。

      var s=String(1,2,3,4,5,6);                    //带有多个参数
      alert(s);                                     //返回字符串"1"
      alert(typeof s);                              //返回string,数值被转换为字符串

String构造函数也可以附带多个参数,它仅负责构造第一个参数,并返回它的字符串。但是,所附带的多个参数是会被JavaScript执行计算的。

【示例5】下面的变量n在构造函数内经过多次计算之后,最后值递增为5。如下:

      var n=1;                                        //初始化变量
      var s=new String(++n, ++n, ++n, ++n);           //字符串构造处理
      alert(s);                                       //返回2
      alert(n);                                       //返回5
      alert(typeof s);                                //返回object,说明是引用类型对象
      alert(typeof n);                                //返回number,说明是数值类型

7.1.3 使用字符编码

String对象预定义了fromCharCode()方法,该方法能够根据字符编码创建字符串,这对于希望通过数字动态生成字符串来说,是非常有用的。

fromCharCode()方法可以包含多个整数参数,每个参数代表字符的Unicode编码。返回值含有指定编码的字符的新字符串。

【示例】下面的代码演示了如何将一组字符串编码转换为字符串。

      var a=[35835,32773,24744,22909], b=[];         //声明一个字符编码的数组
      for(var i in a){                               //遍历数组
          b.push(String.fromCharCode(a[i]));         //把每个字符编码都转换为字符串
      }
      alert(b.join(""));                             //返回字符串"读者您好"

可以把所有字符串按顺序传递给fromCharCode()方法。

      var b=String.fromCharCode(35835,32773,24744,22909);  //传递多个参数,返回字符串"读者您好"

可以使用Function的apply()方法动态调用数组参数:

      var a = [35835, 32773, 24744, 22909], b = [];
      var b=String.fromCharCode.apply(null, a);    //使用apply()方法调用fromCharCode()方法,并传递数组参数
      alert(b);                                    //返回字符串"读者您好"

fromCharCode()方法是String对象的静态方法,不能在字符串中直接调用。

提示:fromCharCode()方法可以与String对象的charCodeAt()配合使用,执行相反操作。

charCodeAt()可以把字符串转换为编码,而fromCharCode()方法能够把编码转换为字符串。