JavaScript 入門 | 標準オブジェクト | String オブジェクト

JavaScript における文字列表現

JavaScript で文字列リテラルは、二重引用符 ("") や一重引用符 (’’) を使用して簡単に作成できる。

var firstStr = "これも文字列である。";      // 二重引用符を使った文字列
var secondStr = 'これも文字列である。';     // 一重引用符を使った文字列
var thirdStr = "私の名前は '山田太郎' です。"  // 一重引用符は二重引用符で囲まれた文字列にだけ含めることができる。
var fourthStr = '私の名前は "山田太郎" です。' // 二重引用符は一重引用符で囲まれた文字列にだけ含めることができる。

文字列の長さ

JavaScript で文字列の長さは length プロパティに保存される。

var strKor = "한글";
var strEng = "abcABC";
strKor.length; // 2
strEng.length; // 6

長く使用されてきた ASCII エンコーディング環境では、英文字は 1 文字あたり 1 バイト、韓国語は 1 文字あたり 2 バイトで表現される。
しかし UTF-8 エンコーディング環境では、英文字は 1 文字あたり 1 バイト、韓国語は 1 文字あたり 3 バイトで表現される。

JavaScript の length プロパティは、その文字列の総バイト数ではなく、文字数だけを保存する。

エスケープシーケンス (escape sequence)

JavaScript は、より多様な文字表現のために複数のエスケープシーケンス (escape sequence) 方式を提供する。 JavaScript が提供するエスケープシーケンス方式は次のとおりである。

  1. 16 進エスケープシーケンス (hexadecimal escape sequence)
  2. Unicode エスケープシーケンス (unicode escape sequence)
  3. Unicode コードポイントエスケープ (unicode code point escape)
// 16 進エスケープシーケンスでは、\x の後は 16 進数として認識される。
'\xA2';
// Unicode エスケープシーケンスでは、\u の後は Unicode として認識される。
'\u00A2';
// ECMAScript 6 から新しく追加された Unicode コードポイントエスケープ方式である。
String.fromCodePoint(0x00A2);

String.fromCodePoint() メソッドは Safari、Internet Explorer ではサポートされない。

長い文字列リテラルを分けて表現する

JavaScript では、長い文字列リテラルを見やすく表現するために、バックスラッシュ () や結合 (+) 演算子を使用できる。

document.write("この文字列は非常に長い文字列である。 \
したがって、何度かに分けた改行が必要である。 \
JavaScript ではバックスラッシュと文字列結合演算子を使用して行を分けられる。<br>");
document.write("この文字列は非常に長い文字列である。" +
" したがって、何度かに分けた改行が必要である。" +
" JavaScript ではバックスラッシュと文字列結合演算子を使用して行を分けられる。");

バックスラッシュ () を使用する方式は ECMAScript の標準方式ではない。 したがって、特定の Web ブラウザーでは正常に表現されないことがある。

String オブジェクト

JavaScript で文字列は通常、文字列リテラルを使用して表現する。

しかし文字列を表すとき、new 演算子を使用して明示的に String オブジェクトを作成することもできる。
この String オブジェクトは、文字列値を包んでいるラッパー (wrapper) オブジェクトである。

var str = "JavaScript";
var strObj = new String("JavaScript");
str;              // "JavaScript"
strObj;           // "JavaScript"
typeof str;       // string
typeof strObj;    // object
(str == strObj);  // 文字列値が同じなので true を返す。
(str === strObj); // 文字列値は同じだが型が異なるため false を返す。