<p>
String 類型用于表示由零或多個 16 位 Unicode 字符組成的字符序列,即字符串。字符串可以由雙引號(<code>"</code>)或單引號(<code>'</code>)表示,因此下面兩種字符串的寫法都是有效的:
</p>
<pre>var firstName = "Nicholas";
var lastName = 'Zakas';</pre>
<p>
與 PHP 中的雙引號和單引號會影響對字符串的解釋方式不同, ECMAScript 中的這兩種語法形式沒有什么區別。用雙引號表示的字符串和用單引號表示的字符串完全相同。不過,以雙引號開頭的字符串也必須以雙引號結尾,而以單引號開頭的字符串必須以單引號結尾。例如,下面這種字符串表示法會導致語法錯誤:
</p>
<pre>var firstName = 'Nicholas"; // 語法錯誤(左右引號必須匹配)</pre>
<h2>
1. 字符字面量
</h2>
<p>
String 數據類型包含一些特殊的字符字面量,也叫轉義序列,用于表示非打印字符,或者具有其他用途的字符。這些字符字面量如下表所示:
</p>
<p>
<table style="width:100%;" cellspacing="0" cellpadding="2" bordercolor="#000000" border="1">
<tbody>
<tr>
<td>
<strong>字 </strong><strong>面</strong> <strong>量</strong><br />
</td>
<td>
<strong>含 義</strong><br />
</td>
</tr>
<tr>
<td>
<code>\n</code><br />
</td>
<td>
換行<br />
</td>
</tr>
<tr>
<td>
<code>\t</code><br />
</td>
<td>
制表<br />
</td>
</tr>
<tr>
<td>
<code>\b</code><br />
</td>
<td>
空格<br />
</td>
</tr>
<tr>
<td>
<code>\r</code><br />
</td>
<td>
回車<br />
</td>
</tr>
<tr>
<td>
<code>\f</code><br />
</td>
<td>
進紙<br />
</td>
</tr>
<tr>
<td>
<code>\\ </code><br />
</td>
<td>
斜杠<br />
</td>
</tr>
<tr>
<td>
<code>\'</code><br />
</td>
<td>
單引號(<code>'</code>),在用單引號表示的字符串中使用。例如: <code>'He said, \'hey.\</code>''<br />
</td>
</tr>
<tr>
<td>
<code>\"</code><br />
</td>
<td>
雙引號(<code>"</code>),在用雙引號表示的字符串中使用。例如: "<code>He said, \"hey.\"</code>"<br />
</td>
</tr>
<tr>
<td>
<code>\xnn</code><br />
</td>
<td>
以十六進制代碼<code>n</code><code>n</code>表示的一個字符(其中n為0~F)。例如, <code>\x41</code>表示"<code>A</code>"<br />
</td>
</tr>
<tr>
<td>
<code>\unnnn</code><br />
</td>
<td>
以十六進制代碼<code>nnnn</code>表示的一個Unicode字符(其中n為0~F)。例如, <code>\u03a3</code>表示希臘字符<code>Σ</code><br />
</td>
</tr>
</tbody>
</table>
</p>
<p>
這些字符字面量可以出現在字符串中的任意位置,而且也將被作為一個字符來解析,如下面的例子所示:
</p>
<pre>var text = "This is the letter sigma: \u03a3.";</pre>
<p>
這個例子中的變量 text 有 28 個字符,其中 6 個字符長的轉義序列表示 1 個字符。任何字符串的長度都可以通過訪問其 length 屬性取得,例如:
</p>
<pre>alert(text.length); // 輸出 28</pre>
<p>
這個屬性返回的字符數包括 16 位字符的數目。如果字符串中包含雙字節字符,那么 length 屬性可能不會精確地返回字符串中的字符數目。
</p>
<h2>
2. 字符串的特點
</h2>
<p>
ECMAScript 中的字符串是不可變的,也就是說,字符串一旦創建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后再用另一個包含新值的字符串填充該變量,例如:
</p>
<pre>var lang = "Java";
lang = lang + "Script";</pre>
<p>
以上示例中的變量 lang 開始時包含字符串"Java"。而第二行代碼把 lang 的值重新定義為"Java"與"Script"的組合,即"JavaScript"。實現這個操作的過程如下:首先創建一個能容納 10 個字符的新字符串,然后在這個字符串中填充"Java"和"Script",最后一步是銷毀原來的字符串"Java"和字符串"Script",因為這兩個字符串已經沒用了。這個過程是在后臺發生的,而這也是在某些舊版本的瀏覽器(例如版本低于 1.0 的 Firefox、 IE6 等)中拼接字符串時速度很慢的原因所在。但這些瀏覽器后來的版本已經解決了這個低效率問題。
</p>
<h2>
3. 轉換為字符串
</h2>
<p>
要把一個值轉換為一個字符串有兩種方式。第一種是使用幾乎每個值都有的 toString()方法(第5 章將討論這個方法的特點)。這個方法唯一要做的就是返回相應值的字符串表現。來看下面的例子:
</p>
<pre>var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"</pre>
<a href="http://www.shouce.ren/study/api/s/8365" target="_blank" class="btn btn-sm btn-success">運行一下</a><br />
<p>
數值、布爾值、對象和字符串值(沒錯,每個字符串也都有一個 toString()方法,該方法返回字符串的一個副本)都有 toString()方法。但 null 和 undefined 值沒有這個方法。
</p>
<p>
多數情況下,調用 toString()方法不必傳遞參數。但是,在調用數值的 toString()方法時,可以傳遞一個參數:輸出數值的基數。默認情況下, toString()方法以十進制格式返回數值的字符串表示。而通過傳遞基數, toString()可以輸出以二進制、八進制、十六進制,乃至其他任意有效進制格式表示的字符串值。下面給出幾個例子:
</p>
<pre>alert(num.toString(8)); // "12"alert(num.toString(16)); // "a"</pre>
<a href="http://www.shouce.ren/study/api/s/8366" target="_blank" class="btn btn-sm btn-success">運行一下</a><br />
<p>
通過這個例子可以看出,通過指定基數, toString()方法會改變輸出的值。而數值 10 根據基數的不同,可以在輸出時被轉換為不同的數值格式。注意,默認的(沒有參數的)輸出值與指定基數 10 時的輸出值相同。
</p>
<p>
在不知道要轉換的值是不是 null 或 undefined 的情況下,還可以使用轉型函數 String(),這個函數能夠將任何類型的值轉換為字符串。 String()函數遵循下列轉換規則:
</p>
<pre>var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"</pre>
<ul>
<li>
如果值有 toString()方法,則調用該方法(沒有參數)并返回相應的結果;
</li>
<li>
如果值是 null,則返回"null";
</li>
<li>
如果值是 undefined,則返回"undefined"。
</li>
</ul>
下面再看幾個例子:<br />
<pre>var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined"</pre>
<a href="http://www.shouce.ren/study/api/s/8367" target="_blank" class="btn btn-sm btn-success">運行一下</a><br />
這里先后轉換了 4 個值:數值、布爾值、 null 和 undefined。數值和布爾值的轉換結果與調用toString()方法得到的結果相同。因為 null 和 undefined 沒有 toString()方法,所以 String()函數就返回了這兩個值的字面量。<br />
<blockquote>
要把某個值轉換為字符串,可以使用加號操作符(3.5 節討論)把它與一個字符串("")加在一起。
</blockquote>