JavaScript 速習チュートリアル

JavaScript の文字列

1. 文字列(Strings)の基本

文字列(String)はテキストを格納するために使用されます。
JavaScript の文字列は、クォーテーション(引用符)で囲んで記述します。

1.1 クォーテーションの使用

文字列は、クォーテーション内に記述された 0 文字以上のキャラクター(文字)の集合です。

let text = "ジョン・ドゥ";

シングルクォーテーション(')とダブルクォーテーション(")のどちらも使用可能です。

let carName1 = "Volvo XC60";  // ダブルクォーテーション
let carName2 = 'Volvo XC60';  // シングルクォーテーション

シングルクォーテーションで作成された文字列と、ダブルクォーテーションで作成された文字列は全く同じように動作します。両者に違いはありません。

1.2 クォーテーションの中のクォーテーション

文字列を囲んでいるクォーテーションと一致しない限り、文字列の中でクォーテーションを使用することができます。

let answer1 = "大丈夫です(It's alright)";
let answer2 = "彼は 'ジョニー' と呼ばれています";
let answer3 = '彼は "ジョニー" と呼ばれています';

2. テンプレートリテラル(Template Strings)

テンプレートリテラルは、ES6(JavaScript 2015)で導入されました。
バックティック()で囲まれた文字列(これはテンプレートリテラルです`)を指します。

テンプレートリテラルを使用すると、文字列内でシングルクォーテーションとダブルクォーテーションの両方を自由に混在させることができます。

let text = `彼はよく "ジョニー" と呼ばれています`;

3. 文字列の長さ(String Length)

文字列の長さを取得するには、組み込みの length プロパティを使用します。

let text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let length = text.length; // 26

4. エスケープキャラクター

文字列はクォーテーションの中に記述する必要があるため、JavaScript は次のような文字列を正しく解釈できません。

let text = "私たちは北方のいわゆる "ヴィキング" です。";

この場合、文字列は "私たちは北方のいわゆる " で切り捨てられてしまいます。
この問題を解決するには、バックスラッシュ(\)によるエスケープキャラクターを使用します。

バックスラッシュエスケープキャラクター(\)は、特殊な文字を通常の文字列キャラクターに変換します。

コード結果説明
\''シングルクォーテーション
\""ダブルクォーテーション
\\\バックスラッシュ

4.1 実装例

\" は文字列内にダブルクォーテーションを挿入します。

let text = "私たちは北方のいわゆる \"ヴィキング\" です。";

\' は文字列内にシングルクォーテーションを挿入します。

let text = '大丈夫です(It\'s alright)。';

\\ は文字列内にバックスラッシュを挿入します。

let text = "このキャラクター \\ はバックスラッシュと呼ばれます。";

4.2 その他のエスケープシーケンス

JavaScript では、他に 6 つのエスケープシーケンスが有効です。

コード結果
\bバックスペース
\fフォームフィード
\n改行(New Line)
\r復帰(Carriage Return)
\t水平タブ
\v垂直タブ

これら 6 つのエスケープキャラクターは、もともとタイプライターやテレタイプ、ファックス機を制御するために設計されたものです。そのため、現代の HTML 出力においてこれらを使用しても、レイアウト上の意味はほとんどありません。

5. 長い行の分割

コードの可読性を高めるために、開発者は長いコード行を避ける傾向があります。
ステートメントを安全に分割するには、演算子の後で改行するのが一般的です。

document.getElementById("demo").innerHTML =
"こんにちは、ドリー!";

文字列を分割したい場合は、文字列の結合(+ 演算子)を使用するのが安全です。

document.getElementById("demo").innerHTML = "こんにちは、" +
"ドリー!";

5.1 テンプレートリテラルによる複数行記述

前述のテンプレートリテラルを使用すると、複数行にわたる文字列をそのまま記述できます。

let text =
`素早い
茶色の狐が
のろまな犬を
飛び越える`;

6. オブジェクトとしての文字列

通常、JavaScript の文字列はリテラルから作成されるプリミティブ値です。

let x = "John";

しかし、new キーワードを使用してオブジェクトとして定義することも可能です。

let y = new String("John");

6.1 String オブジェクト使用の禁止

String オブジェクトは作成しないでください。new キーワードはコードを複雑にし、実行速度を低下させます。また、String オブジェクトは比較演算において予期せぬ結果をもたらします。

== 演算子を使用した場合、xy等しい(true)と判定されます。

let x = "John";
let y = new String("John");
// (x == y) は true

しかし、=== 演算子(厳密等価演算子)を使用した場合、xy等しくない(false)と判定されます。

let x = "John";
let y = new String("John");
// (x === y) は false(型が異なるため)

さらに、2 つの JavaScript オブジェクトを比較すると、常に false が返されます。

let x = new String("John");
let y = new String("John");

// (x == y) は false
// (x === y) は false

たとえ内容が同じであっても、オブジェクトとしての参照先が異なるため、比較結果は決して true にはなりません。