本頁の目次 目次 次頁: 15-6_Boolean_Objects 前頁: 15-4_Array_Objects
String がコンストラクタとしてではなく関数として呼出されると、型変換を行う。
ToString(value) で算出される (String オブジェクトではなく) 文字列値 を返す。 value が供給されないならば、空文字列 "" が返される。
new
式の一部として呼出される String は、コンストラクタである: 新規にオブジェクトを生成し、初期化する。
新規に構築されたオブジェクトの [[Prototype]] プロパティは、 String.prototype (セクション 15.5.3.1) の初期値である、オリジナルの String プロトタイプオブジェクトに設定される。
新規に構築されたオブジェクトの [[Class]] プロパティは、 "String" に設定される。
新規に構築されたオブジェクトの [[Value]] プロパティは、 ToString(value) に設定され、 value が供給されないければ空文字列に設定される。
String コンストラクタの内部 [[Prototype]] プロパティの値は、 Function プロトタイプオブジェクト (セクション 15.3.4) である。
内部プロパティと length プロパティ (値は 1) の他に、 String コンストラクタは次のプロパティを持つ:
String.prototype の初期値は String プロトタイプオブジェクト (セクション 15.5.4) である。
このプロパティは属性 { DontEnum, DontDelete, ReadOnly } を持つ。
引数の数と同数で構成される文字列値を返す。各引数は、左から右へ、第 1 引数が第 1 文字目を指定、というように、結果文字列の 1 文字を指定する。引数は、演算 ToUint16 (セクション 9.7) の適用し、結果の 16 ビット整数を文字のコードポイント値とみなし、文字に変換される。 引数が供給されないならば、結果は空文字列である。
fromCharCode
関数の length プロパティは 1 である。
String プロトタイプオブジェクトは、値が空文字列である String オブジェクト ([[Class]] が "String") それ自身である。
String プロトタイプオブジェクトの内部 [[Prototype]] プロパティの値は、 Object プロトタイプオブジェクト (セクション 15.2.3.1) である。
String.prototype.constructor の初期値は String コンストラクタである。
この文字列値を返す。 (String オブジェクトでは、 toString
メソッドは valueOf メソッドと同じものを返すということが起こることに注意。)
toString
関数は汎用的ではない; this
値が String オブジェクトでなければ、例外 TypeError を投げる。それゆえ、他の種類のオブジェクトにメソッドとして転用できない。
この文字列値を返す。
valueOf
関数は汎用的ではない; this
値が String オブジェクトでなければ、例外 TypeError を投げる。それゆえ、他の種類のオブジェクトにメソッドとして転用できない。
このオブジェクトから文字列に変換された結果文字列内の位置 pos の文字で構成される文字列を返す。その位置に文字がないならば、結果は空文字列である。結果は文字列値であり、 String オブジェクトではない。
pos が整数である Number 型の値ならば、 x.charAt
(pos) の結果は x.substring(pos, pos+1) の結果と等しい。
charAt
メソッドが 1 個の引数 pos で呼ばれると、 次のステップが取られる:
this
値を与える。NOTE charAt
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
このオブジェクトを文字列へ変換した結果文字列の位置 pos の文字のコードポイント値をあらわす数 (0 以上 216 未満の整数) を返す。その位置に文字が存在しないならば、結果は NaN である。
charCodeAt
メソッドが 1 個の引数 pos で呼出されるとき、次のステップが取られる:
this
値を与える。NOTE charCodeAt
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
concat
メソッドが 0 個以上の引数 string1, string2, etc. で呼出されると、 string1, string2, etc. のそれぞれ (各引数は文字列に変換される) の文字が続く (文字列に変換された) このオブジェクトの文字で構成される文字列を返す。 結果は文字列値であり、 String オブジェクトではない。 次のステップが取られる:
this
値を与える。concat
メソッドの length プロパティは 1 である。
NOTE concat
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
searchString が、このオブジェクトの文字列への変換結果の部分文字列として position と同じかそれ以上の 1 個以上の位置で出現するならば、その position の最小のインデックスが返される; そうでなければ、 -1 が返される。 position が undefined ならば、 0 が想定され、文字列全域を検索する。
indexOf
メソッドは 2 個の引数 searchString と position をとり、次のステップを実行する:
this
値を与える。indexOf
メソッドの length プロパティは 1 である。
NOTE indexOf
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
searchString が、このオブジェクトの文字列への変換結果の部分文字列として position と同じかそれ以上の 1 個以上の位置で出現するならば、その position の最大のインデックスが返される; そうでなければ、 -1 が返される。 position が undefined ならば、文字列値の長さが想定され、文字列全域を検索する。
lastIndexOf
メソッドは 2 個の引数 searchString と position をとり、次のステップを実行する:
this
値を与える。lastIndexOf
メソッドの length プロパティは 1 である。
NOTE lastIndexOf
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
localeCompare
メソッドが 1 個の引数 that で呼出されるとき、このオブジェクト (文字列に変換される) と that (文字列に変換される) のロケールに反応する文字列比較の結果を表す NaN 以外の数を返す。 2 個の文字列が実装が定義する方法で比較される。結果は、システムのデフォルトのロケールが規定する並び順に文字列を並べることを意図され、this が that よりも前に来るか、同じか、後にくるかによって、それぞれ負、0、正になる。
localeCompare
メソッドを 2 個の引数 this
と that をとると関数と考えるならば、全文字列セットにおける矛盾のない比較関数 (セクション 15.4.4.11 で定義される) である。さらに、 Unicode 標準によって規準的に等価 (canonically equivalent) と考えられる 2 個の文字列を比較するとき、 localeCompare
は 0 または -0 を返す。
実際の戻り値は、結果の値の追加情報の符号化を実装者に許可することを実装定義に残されるが、この関数は文字列の全てを全体的な並びを定義することを要求され、 Unicode 標準によって規準的に等価 (canonically equivalent) と考えられる 2 個の文字列を比較するとき、 0 を返す。
NOTE localeCompare
メソッド自身を直接 Array.prototype.sort の引数にするのは、後者は 2 個の引数を要求するので適切ではない。
NOTE この関数は、ホスト環境から ECMAScript 環境に対して言語に反応する比較機能が可能になっていることを当てにして、ホスト環境の現在のロケールの規則に従った比較を意図される。この関数が Unicode 標準に従って規準的に等価 (canonically equivalent) である文字列を同一として扱うことが強く推奨される (言い換えると、双方の文字列をまず標準化形式 C または D に変換したかのように比較する)。この関数はまた Unicode 互換の等価性また分解を信頼しないことを推奨される。
全く言語に反応しない比較がホスト環境から可能ならば、この関数はビット比較を行ってよい。
NOTE localeCompare
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
NOTE この関数の第二パラメータは、この標準の将来のバージョンで使用される可能性がある; 実装はこのパラメータを他の用途に使用しないことを推奨する。
regexp がその [[Class]] プロパティが "RegExp" であるオブジェクトでないならば、それは式 new
RegExp(regexp) の結果に置換される。 string を this
値の文字列への変換結果とする。次の一つを行う:
NOTE match
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
this
値を文字列に変換した結果を string とする。
searchValue が正規表現 ([[Class]] プロパティが "RegExp" であるオブジェクト) ならば、以下をおこなう: searchValue.global が false ならば、正規表現 searchValue のマッチの最初に関して string を検索する。 searchValue.global が true ならば、正規表現 searchValue のマッチの全てに関して string を検索する。 検索は searchValue.lastIndex の更新を含め String.prototype.match と同様の方法で行う。 m を searchValue 内の残りの捕捉括弧の数とする(NCapturingParens がセクション 15.10.2.1 で定義される)。
searchValue が正規表現でないならば、 searchString を ToString(searchValue) として、 searchString の最初の発生に関して string を検索する。 m を 0 とする。
replaceValue が関数ならば、マッチした各部分文字列ごとにその関数を呼出し、次の m + 3 個の引数を渡す。引数 1 はマッチした部分文字列である。 searchValue が正規表現ならば、続く m 個の引数は MatchResult (セクション 15.10.2.1 参照) 内の捕捉全てである。 引数 m + 2 は string 内部でマッチが発生した場所のオフセット、引数 m + 3 は string である。結果は、マッチした部分文字列のそれぞれ該当する関数呼出しの戻り値を必要に応じて文字列に変換して、オリジナルの入力を置換して派生する文字列値となる。
そうでなければ、 newstring を replaceValue を文字列に変換した結果とする。結果は、マッチした部分文字列のそれぞれを、次の表に規定される置換テキストで newstring 内の文字を置換した newstring から派生する文字列によってオリジナルの入力を置換して派生する文字列値となる。これら $ 置換は左から右へと行われ、そして、一旦そのような置換が行われれば、新しい置換テキストは更なる置換の主体にはならない。たとえば、 "$1,$2".replace
(/(\$(\d))/g, "$$1-$1$2") は "$1-$11,$1-$22" を返す。 newstring 内で 下のどの形式にもマッチしない $ は、そのまま残される。
Characters | Replacement text |
$$ | $ |
$& | マッチした部分文字列 |
$` | マッチした部分文字列に先行する文字列の部分。 |
$' | マッチした部分文字列に後続する文字列の部分。 |
$n | n を 1 桁の数字 1-9 、かつ $n に10進数が続かないものとして、 n 番目の捕捉。 n≤m かつ n 番目の捕捉が undefined ならば、代わりに空文字列を使用する。 n>m ならば、 結果は実装定義である。 |
$nn | nn を 2 桁の数字 01-99 として、 nn 番目の捕捉。 nn≤m かつ nn 番目の補足が undefined ならば、代わりに空文字列を使用する。 nn>m ならば、 結果は実装定義である。 |
NOTE replace
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
regexp がその [[Class]] プロパティが "RegExp" であるオブジェクトでないならば、それは式 new
RegExp(regexp) の結果に置換される。 string を this
値の文字列への変換結果とする。
値 string は、正規表現パターン regexp の発生に対してその開始から検索される。結果はパターンマッチを行う string 内部のオフセットを示す数値となり、またマッチしないならば -1 となる。
NOTE このメソッドは regexp の lastIndex プロパティと global プロパティを無視する。 regexp の lastIndex プロパティはそのまま変更されない。
NOTE search
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
slice
メソッドは 2 個の引数 start と end をとり、このオブジェクトの文字列への変換結果の、位置 start の文字から開始して位置 end の前の文字までを含む部分文字列を返す (または文字列の末尾までなら end は undefined である)。 start が 負 ならば、 sourceLength を文字列の長さとして (sourceLength+start) として扱われる。 end が 負 ならば、 sourceLength を文字列の長さとして (sourceLength+end) として扱われる。結果は文字列値となり、 String オブジェクトにはならない。次のステップが取られる:
this
値を与える。slice
メソッドの length プロパティは 2 である。
NOTE slice
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
このオブジェクトを文字列に変換した結果の部分文字列が蓄積されている Array オブジェクトを返す。部分文字列は、 separator の出現の左から右への検索で決定される; これらの出現は返される配列内の部分文字列の一部にはならないが、文字列値の分割を提供する。 separator の値は任意の長さの文字列、または RegExp オブジェクト (つまり [[Class]] プロパティが "RegExp" であるオブジェクト; セクション 15.10 参照) でもよい。
separator の値は空文字列、空の正規表現、空文字列にマッチする正規表現でもよい。この場合、 separator は入力文字列の先頭または末尾の空部分文字列にマッチせず、また前の separator マッチの末尾の空部分文字列にもマッチしない。 (例えば、 separator が空文字列ならば、文字列は不可分の文字に分割される; 結果配列の長さと文字列の長さは等しく、各部分文字列は 1 文字だけを含む。) separator が正規表現ならば、バックトラッキングでその位置の空でない部分文字列マッチが発生するとしても、この文字列の与えられた位置の最初のマッチのみ考慮する。 (例えば、 "ab".split
(/a*?/) が ["a","b"] と評価される一方、 "ab".split
(/a*/) は ["","b"] と評価される。)
このオブジェクトが空文字列ならば(または空文字列に変換されるならば)、結果は separator が空文字列にマッチ可能かどうかに依存する。可能ならば、結果は要素をもたない配列である。不可能ならば、結果は空文字である要素を 1 個持つ配列となる。
separator が捕捉括弧を含む正規表現ならば、 separator が捕捉括弧の結果 (結果 undefined を含む) にマッチするごとに、出力配列内に継ぎ足される。 (例えば、 "A<B>bold</B>and<CODE>coded</CODE>".split
(/<(\/)?([^<>]+)>/) は配列 ["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""] に評価される。)
separator が undefined ならば、結果の配列は this
値 (文字列に変換された) である 1 個の文字列のみで構成される。 limit が undefined でないならば、出力配列は limit 個以下の要素になるように切り詰められる。
split
が呼出されると、次のステップが取られる:
new
Array() によるものと同様の新しい配列とする。内部補助関数 SplitMatch は 3 個のパラメータ、文字列 S, 整数 q, 文字列または正規表現 R をとり、次を実行して MatchResult (セクション 15.10.2.1 参照) を返す:
split
メソッドの length プロパティは 2 である。
NOTE split
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
NOTE split
メソッドは、 RegExp オブジェクトである separetor の separator.global の値を無視する。
substring
メソッドは 2 個の引数 start と end をとり、このオブジェクトの文字列への変換結果の、位置 start の文字から開始して位置 end の前の文字までを含む部分文字列を返す (または文字列の末尾までなら end は undefined である)。 結果は文字列値となり、 String オブジェクトにはならない。
引数が NaN または負の値のいずれかならば、 0 に置換される; 引数が文字列の長さより大きいならば、文字列の長さに置換される。
start が end より大きいならば、それらは交換される。
次のステップが取られる:
this
値を与える。substring
メソッドの length プロパティは 2 である。
NOTE substring
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
このオブジェクトが文字列でないならば、文字列に変換される。文字列内の文字は、一つ一つ小文字に変換される。結果は文字列値となり、 String オブジェクトにはならない。
文字は一つ一つ変換される。各変換の結果は、文字が Unicode 小文字 (Unicode lowercase equivalent) を持つならばそれが使われ、持たないならばオリジナルの文字である。
NOTE 結果は Unicode 文字データベース (これは UnicodeData.txt ファイルだけでなく、 Unicode 2.1.8 以降に含まれる SpecialCasings.txt ファイルも明示的に含む) 内におけるケースマッピングに従い引き出されるべきである。
NOTE toLowerCase
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
この関数は厳密に toLowerCase と同様に動作する。但し、結果はロケールから独立した結果ではなく、ホスト環境の現在のロケールに対して正しい結果をもたらすことが意図される。正規 Unicode 文字マッピングで言語の規則が干渉する (たとえばトルコ語のような) ごく一部の文字でのみ違いが存在する。
NOTE toLocaleLowerCase
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
NOTE この関数の第一パラメータは、この標準の将来のバージョンで使用される可能性がある; 実装はこのパラメータを他の用途に使用しないことを推奨する。
この関数は String.prototype.toLowerCase ときっちり同じように振舞う。但し、文字は Unicode 文字データベースで規定される大文字の同じ文字にマップされる。
NOTE toUpperCase
と toLowerCase はともにコンテキストに反応する振る舞いを持つため、関数は非対称的である。言い換えると、 s.toUpperCase
().toLowerCase() は s.toLowerCase() と等しいとは限らない。
NOTE toUpperCase
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
この関数は厳密に toUpperCase と同様に動作する。但し、結果はロケールから独立した結果ではなく、ホスト環境の現在のロケールに対して正しい結果をもたらすことが意図される。正規 Unicode 文字マッピングで言語の規則が干渉する (たとえばトルコ語のような) ごく一部の文字でのみ違いが存在する。
NOTE toLocaleUpperCase
関数は故意に汎用的である; this
値が String オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。
NOTE この関数の第一パラメータは、この標準の将来のバージョンで使用される可能性がある; 実装はこのパラメータを他の用途に使用しないことを推奨する。
String インスタンスは、 String プロトタイプオブジェクトからプロパティを継承し、また [[Value]] プロパティと length プロパティを持つ。
[[Value]] プロパティは、この String オブジェクトによってあらわされる文字列値である。
この String オブジェクトによってあらわされる String 値の文字数である。
一旦 String が生成されたら、このプロパティは変更されない。属性 { DontEnum, DontDelete, ReadOnly } である。