JavaScript/String

出典: フリー教科書『ウィキブックス(Wikibooks)』
移動: 案内検索

文字列(もじれつ、string)とは、"Hello, world!" のようなテキストのことです。JavaScriptには文字列リテラルと組み込みの文字列型が存在し、文字列に関するメソッドを提供するStringオブジェクトが存在します。JavaScript 1.3以降Unicodeがサポートされたので、Unicode文字列もASCII文字列と同じように扱うことができます。JavaScriptの文字列は内部的にはUTF-16で符号化されています。

概要[編集]

文字列はJavaScriptの基本的なデータ型(プリミティブ型)の一つです。文字列は""または''引用符で囲んで表します。

var str = "Hello, world!";
// または
var str = 'Hello, world!';

これを文字列リテラル(もじれつリテラル、string literal)といいます。シングルクォートとダブルクォートに違いはありませんが、1つの文字列リテラルは同じ種類の引用符で囲まなければなりません。以下は文字列リテラルの例です。

var str0 = "Hello, world!";
var str1 = '世界よこんにちは';
var str2 = "42";
var str3 = "I'm a string.";
var str4 = 'I\'m a string.';

'I\'m a string.'"I'm a string." と等しい文字列です。シングルクォートの中にシングルクォートを書く場合は、直前にバックスラッシュ (\) を付けます。ダブルクォートの中にダブルクォートを書く場合も同様です。直前にバックスラッシュを付けて書く文字をエスケープ文字(エスケープもじ、escape character)といいます。改行などの特殊文字は通常の文字で表すことができないため、\nのようなエスケープ文字を使って表現します。\そのものを表す場合は、\\と書きます。

JavaScriptのエスケープ文字の一覧
文字 意味 ISO/IEC 8859-1エスケープ文字 Unicodeエスケープ文字
\b バックスペース \x08 \u0008
\t タブ \x09 \u0009
\n 改行 \x0A \u000A
\v 垂直タブ \x0B \u000B
\f 改ページ \x0C \u000C
\r 復帰 \x0D \u000D
\" " \x22 \u0022
\' ' \x27 \u0027
\\ バックスラッシュ \x5C \u005C
\XXX ISO/IEC 8859-1エスケープシーケンス(八進法) \x00-\xFF \u0000-\u00FF
\xXX ISO/IEC 8859-1エスケープシーケンス(十六進法) \x00-\xFF \u0000-\u00FF
\uXXXX Unicodeエスケープシーケンス(十六進法) \x00-\xFF \u0000-\uFFFF

ISO/IEC 8859-1エスケープ文字では\x00から\xFFまでの文字を表すことができます。Unicodeエスケープ文字では\u0000から\uFFFFまでの文字を表すことができます。JavaScriptではサロゲートペアの文字列リテラルはサポートされていません(String.fromCharCodeString.prototype.charCodeAtなどのメソッドも標準ではサロゲートペアに対応していません)。

String[編集]

StringオブジェクトにはJavaScriptの文字列に関するメソッドが定義されています。

var str = new String("Hello, world!");
alert( str.length ); // "13" と警告 -- 文字列の長さ

Stringオブジェクトのインスタンスからは、文字列に関するさまざまなメソッドを呼び出すことができます。JavaScriptの文字列は自動的にStringオブジェクトのインスタンスに変換されるので、JavaScriptの文字列からもメソッドを呼び出すことができます。このようなクラスは、いくつかのプログラミング言語ではプリミティブラッパークラスとも呼ばれます。

プロパティ[編集]

メソッド[編集]

文字の取得[編集]

文字列の個々の文字を取り出すには、charAtメソッドを使用します。

var H = "Hello, world!".charAt(0);

一部の処理系では文字列を配列として扱うこともできますが、これは非標準です。

var H = "Hello, world!"[0];

文字コード(バイト表現)を取得するにはcharCodeAtメソッドを使用します。

alert( "Hello, world!".charCodeAt(0) ); // "72" と警告 -- "H" のバイト表現

文字列の比較[編集]

文字列は数値と同じ比較演算子を使用して比較することができます。

if ( 'A' < 'Z' ) { // A が Z より小さいならば
    alert(true);   // "true" と警告
}

部分文字列[編集]

部分文字列(ぶぶんもじれつ、substring)とは、文字列の部分のことです。JavaScriptで "Hello, world!" から "world" の部分を取り出す処理の書き方はいくつかあります。まず、文字列の個々の文字を取得する処理についておさらいしておきましょう。

H e l l o , w o r l d  !
0 1 2 3 4 5 6 7 8 9 10 11 12

このように文字列の個々の文字には、インデックス (index) と呼ばれる添え字がふられています。インデックスは0から始まることに注意してください。このとき、lengthプロパティで取得できる文字列の長さは13です。最後の文字のインデックスは文字列の長さより1小さくなります。charAtメソッドにインデックスを渡すと、個々の文字を取り出すことができます。

var w = "Hello, world!".charAt(7);

"world" を取り出すにはsliceメソッドを使います。

var world = "Hello, world!".slice(7, 12);

第1引数に取り出す文字列 ("world") の最初の文字 ("w") のインデックス、第2引数に最後の文字の ("d") のインデックス + 1を渡します。第2引数は第1引数 + 部分文字列の長さと言い換えることもできます。まとめると、sliceメソッドは第1引数以上、第2引数未満の部分文字列を返します。

var world = "Hello, world!".substr(7, 5);
// および
var world = "Hello, world!".substring(7, 12);

Stringオブジェクトにはsliceメソッドのほかにも、substrメソッド、substringメソッドがあり、部分文字列の切り出しに使えるのですが、これらのメソッドは負のインデックスの扱いが処理系によって異なる場合があるので、一般的にはsliceメソッドの方が好まれます。

このページ「JavaScript/String」は、書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にノートへどうぞ。