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; // 264. エスケープキャラクター
文字列はクォーテーションの中に記述する必要があるため、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 オブジェクトは比較演算において予期せぬ結果をもたらします。
== 演算子を使用した場合、x と y は等しい(true)と判定されます。
let x = "John";
let y = new String("John");
// (x == y) は trueしかし、=== 演算子(厳密等価演算子)を使用した場合、x と y は等しくない(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 にはなりません。