Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
String オブジェクトは文字の並びを表したり操作したりするために使用されます。
文字列は、テキスト形式で表現可能なデータを保持するのに便利です。最もよく使われる操作として、文字列の長さをチェックする length プロパティ、 文字列に対する + および += 演算子を用いた文字列の連結、文字列の中の部分文字列の存在や位置をチェックする indexOf() メソッド、部分文字列を取り出す substring() メソッドが挙げられます。
文字列は文字列リテラルからプリミティブとして、または String() コンストラクターを使用してオブジェクトとして生成することができます。
文字列プリミティブと文字列オブジェクトは多くの動作を共有していますが、その他に重要な相違点と注意点があります。 下記の「文字列プリミティブと String オブジェクト」を参照してください。
文字列リテラルは単一引用符または二重引用符を使用して指定することができ、どちらでも同様に扱われますが、逆引用符文字 ` を使用することもできます。最後の形はテンプレートリテラルを指定しています。この形式では式を補完することができます。文字列リテラルの構文については、字句文法を参照してください。
文字列内の個々の文字へのアクセス方法には、2 通りの方法があります。そのひとつは charAt() メソッドです。
他にも、文字列を配列風のオブジェクトとして扱い、個々の文字を数値インデックスに対応させる方法もあります。
ブラケット記法を使用した文字アクセスでは、これらのプロパティに値を設定したり削除したりすることはできません。関連するプロパティを書き込んだり設定したりすることもできません。(より詳細な情報は Object.defineProperty() を参照してください。)
文字列を比較するには小なり / 大なり演算子を用います。
なお、すべての比較演算子は、=== および == を含め、文字列を大文字小文字を区別して比較します。文字列の大文字小文字を区別せずに比較する一般的な方法は、両方の文字列を同じ種類(大文字または小文字)に変換してから比較することです。
toUpperCase() と toLowerCase() のどちらで変換するかはほとんど自由ですが、ラテン文字以外に広げると、どちらが完全に堅牢なとは言えません。例えば、ドイツ語の小文字 ß と ss は toUpperCase() によってどちらも SS に変換されますが、トルコ語の文字 ı は toLocaleLowerCase("tr") を使用しない限り、 toLowerCase() によって I と等しくない文字として誤って報告されてしまいます。
ロケールを意識して大文字と小文字を区別せずに比較するための堅牢な解決策は、Intl.Collator API を使用するか、文字列の localeCompare() メソッド(インターフェイスは同じです)を sensitivity オプションで "accent" または "base" に設定します。
localeCompare() メソッドは strcmp() と同様の方法で文字列を比較することができます。ロケールを意識した方法で文字列を並べ替えることができます。
JavaScript では、 String オブジェクトとプリミティブ文字列は区別されることに注意してください。(Boolean や Number にも同じことが言えます。)
文字列リテラル(二重引用符または単一引用符で示されます)、および String 関数をコンストラクター以外の場面で(すなわち new キーワードを使わずに)呼び出した場合はプリミティブの文字列になります。 文字列プリミティブに対してメソッドを呼び出したり、プロパティを参照したりするコンテキストでは、JavaScript は自動的に文字列プリミティブをラップし、ラッパーオブジェクトに対してメソッドを呼び出したり、プロパティを参照したりします。
警告: String をコンストラクターとして使用することはほとんどないでしょう。
プリミティブの文字列と String オブジェクトは eval() を使用すると異なる結果となります。 eval に渡されたプリミティブは、ソースコードとして扱われます。 String オブジェクトは他のオブジェクトと同様に、オブジェクトとしてそのままの文字列を返します。
こういった理由から、プリミティブの文字列を期待して実装されたコードは String オブジェクトでうまく動作しないことがあります。しかし、一般的にはこれらの違いを考慮しなければならないことはあまりありません。
なお、String オブジェクトは valueOf() メソッドを用いることで、プリミティブの文字列に変換することができます。
文字列を期待する組み込み操作の多くは、最初に引数を文字列に変換します(これが String オブジェクトが文字列プリミティブと同じように動作する主な理由です)。処理は以下のように要約できます。
JavaScript でほぼ同じ効果を得る方法はいくつかあります。
用途によっては `${x}` (組み込みの動作を模倣するため)または String(x)(エラーを発生させずにシンボル値を処理するため)を使用したいかもしれませんが、 "" + x は使用しないでください。
文字列は基本的に UTF-16 コード単位の並びとして表します。UTF-16 エンコーダーでは、すべてのコード単位は正確に 16 ビット長です。つまり、単一の UTF-16 コード単位として表現可能な文字は、最大で 216 個、つまり 65536 通りあります。この文字集合は基本多言語面 (BMP) と呼ばれ、ラテン語、ギリシャ語、キリル文字のような最も一般的な文字や多くの東アジアの文字を含みます。各コード単位は u の文字列の後にちょうど 4 つの 16 進数を続けて書くことができます。
しかし、Unicode の文字集合全体は 65536 よりはるかにずっと大きいのです。追加の文字は UTF-16 でサロゲートペアとして格納されます。これは単一の文字を表す 16 ビットのコード単位のペアです。曖昧さを避けるために、ペアの 2 つの部分は 0xD800 と 0xDFFF の間でなければならず、これらのコード単位は単一のコード単位の文字をエンコードするためには使用しません。(より正確に言えば、上位サロゲート(上位サロゲートコード単位とも呼ばれる)は、0xD800から0xDBFF(両端値を含む)までの値を持ち、下位サロゲート(下位サロゲートコード単位とも呼ばれる)は、0xDC00 から 0xDFFF(両端値を含む)までの値を持ちます。各 Unicode コードポイントは文字列の中で \u{xxxxxx} と書くことができ、ここで xxxxxx は 1-6 桁の 16 進数を表します。
「孤立サロゲート」とは、下記の記述のいずれかを満たす 16 ビットのコード単位です。
孤立サロゲートは Unicode 文字を表しません。すべて UTF-16 コード単位に基づいて動作するため、ほとんどの JavaScript 組み込みメソッドは正しく扱いますが、他のシステムとやりとりするとき、孤立サロゲートはしばしば有効な値ではありません。例えば、encodeURI() は孤立サロゲートがあると URIError が発生します。これは URI エンコーディングが UTF-8 エンコーディングを使用しており、孤立サロゲートに対するエンコーディングを持たないためです。孤立サロゲートを格納しない文字列は well-formed 文字列と呼ばれ、UTF-16 を扱わない関数(encodeURI() や TextEncoder など)で使用しても安全です。isWellFormed() メソッドで文字列が整形されているか調べたり、toWellFormed() メソッドで孤立サロゲートをサニタイズすることができます。
Unicode 文字の上に、書記素クラスターと呼ばれる 1 つの視覚単位として扱われるべき Unicode 文字並びがあります。最も一般的なケースは絵文字で、様々なバリエーションがある絵文字の多くは、実際には複数の絵文字で形成されており、たいていの場合、<ZWJ> (U+200D) 文字で結合されています。
どのレベルの文字を反復処理するのかに注意する必要があります。例えば、split("") は UTF-16 コード単位で分割し、サロゲートペアを区切ります。文字列インデックスも各 UTF-16 コード単位のインデックスを参照します。他にも、[Symbol.iterator]() はUnicode コードポイントで反復処理します。書記素クラスターを反復処理するには独自のコードが必要です。
String オブジェクトを生成します。関数として呼び出された場合、String 型のプリミティブ値を返します。
指定された Unicode 値の並びから生成した文字列を返します。
String.fromCodePoint()指定された Unicode コードポイントの並びから生成した文字列を返します。
String.raw()生のテンプレート文字列から生成した文字列を返します。
以下のプロパティは String.prototype で定義されており、すべての String インスタンスで共有されます。
String.prototype.constructorインスタンスオブジェクトを作成したコンストラクター関数。文字列インスタンスの場合、初期値は String コンストラクターです。
以下のプロパティはそれぞれの String インスタンスに固有のプロパティです。
length文字列の length を反映します。読み取り専用です。
指定した index にある文字(UTF-16 コード単位)を返します。負の整数を受け入れ、その場合は文字列の最後の文字から遡ります。
String/charAtindex で指定された位置の文字(UTF-16 コード単位 1 つ)を返します。
String.prototype.charCodeAt()index で指定された位置の文字の UTF-16 コード単位の値を示す数を返します。
String.prototype.codePointAt()pos で指定された位置から始まる UTF-16 エンコードされた際のコードポイントの、コードポイントの値である正の整数を返します。
String.prototype.concat()2 つ(以上)の文字列を連結し、新しい文字列を返します。
String.prototype.endsWith()文字列が searchString の文字列で終わるかどうかを判定します。
String.prototype.includes()呼び出した文字列に searchString が含まれているかを返します。
String.prototype.indexOf()この文字列内で、searchValue が最初に現れる位置を返します。見つからなかった場合は -1 を返します。
String.prototype.isWellFormed()文字列に孤立サロゲートが含まれているかどうかを示す論理値を返します。
String.prototype.lastIndexOf()この文字列内で、searchValue が最後に現れる位置を返します。見つからない場合は -1 を返します。
String.prototype.localeCompare()参照文字列 compareString が、並べ替え順において、与えられた文字列の前になるか後になるか、あるいは、同じかどうかを示す数値を返します。
String.prototype.match()文字列に対して正規表現 regexp を一致させるために使用されます。
String.prototype.matchAll()regexp が一致するものすべてのイテレーターを返します。
String.prototype.normalize()呼び出された文字列の値の Unicode 正規化形式を返します。
String.prototype.padEnd()現在の文字列の末尾から指定された文字列で埋めた、長さ targetLength 文字の新たな文字列を返します。
String.prototype.padStart()現在の文字列の先頭から指定した文字列で埋めた、長さ targetLength 文字の新たな文字列を作成します。
String.prototype.repeat()オブジェクトの要素を count 回繰り返した文字列を返します。
String.prototype.replace()searchFor が現れたところを replaceWith で置換するために使用します。searchFor は文字列または正規表現であり、replaceWith は文字列または関数です。
String.prototype.replaceAll()searchFor が現れたところすべてを replaceWith で置換するために使用します。searchFor は文字列または正規表現であり、replaceWith は文字列または関数です。
String.prototype.search()正規表現 regexp と呼び出された文字列が一致するところを検索します。
String.prototype.slice()文字列の一区間を取り出し、新しい文字列を返します。
String.prototype.split()呼び出した文字列を、部分文字列 sep が現れるところで分割し、文字列の配列を生成して返します。
String.prototype.startsWith()呼び出した文字列が文字列 searchString で開始されているかを判断します。
String.prototype.substr()指定されたインデックスから、指定された文字数だけ文字列の一部を返します。
String/substring呼び出した文字列の指定された位置以降(または区間)にある文字が入った新しい文字列を返します。
String.prototype.toLocaleLowerCase()文字列内の文字が、現在のロケールに沿って小文字に変換されます。
ほとんどの言語では、これは toLowerCase() と同じものを返します。
String.prototype.toLocaleUpperCase()文字列内の文字が、現在のロケールに沿って大文字に変換されます。
ほとんどの言語では、これは toUpperCase() と同じものを返します。
String.prototype.toLowerCase()小文字に変換された文字列の値を呼び出して返します。
String.prototype.toString()指定されたオブジェクトの文字列を返します。Object.prototype.toString() メソッドを上書きします。
String.prototype.toUpperCase()大文字に変換された文字列の値を呼び出して返します。
String.prototype.toWellFormed()この文字列の孤立サロゲートをすべて Unicode 置換文字 U+FFFD に置き換えた文字列を返します。
String.prototype.trim()文字列の先頭と末尾にあるホワイトスペースを削除します。
String.prototype.trimEnd()文字列の末尾にあるホワイトスペースを削除します。
String.prototype.trimStart()文字列の先頭にあるホワイトスペースを削除します。
String/valueOf指定されたオブジェクトのプリミティブ値を返します。Object.prototype.valueOf() メソッドを上書きします。
String.prototype[Symbol.iterator]()文字列値のコードポイントを反復処理し、文字列値として各コードポイントを返す、新しいイテレーターオブジェクトを返します。
メモ: 非推奨です。これらのメソッドは避けてください。
これらはとても古い HTML 標準に基づいており、現在利用できる HTML タグや属性のサブセットしか提供していないため、使用するのには限界があります。多くが今日では非推奨または標準外のマークアップを生成します。さらに、文字列の連結を検証やサニタイズなしに行うため、innerHTML を使用して直接挿入するとセキュリティ上の脅威となる可能性があります。代わりに DOM API、例えば document.createElement() など使用してください。
<a name="name">(ハイパーテキストのターゲット)
String.prototype.big() <big> String.prototype.blink()<blink>
String.prototype.bold() <b> String.prototype.fixed() <tt> String.prototype.fontcolor() String.prototype.fontsize() String.prototype.italics() <i> String.prototype.link()<a href="url">(URL へのリンク)
String.prototype.small() <small> String.prototype.strike() <strike> String.prototype.sub() <sub> String.prototype.sup() <sup>これらのメソッドは文字列そのものが HTML タグを含むかどうかを調べないので、無効な HTML を作成する可能性があることに注意してください。
これらが行う唯一のエスケープは、属性値中の " を(anchor()、fontcolor()、fontsize()、link()において)" に置き換えることです。
String() 関数は、値の toString() メソッドを呼び出すよりも、値を文字列に変換する信頼性の高い方法です。前者は null や undefined に対して使用しても動作するからです。例を示します。
| ECMAScript® 2027 Language Specification # sec-string-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月21日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.