Visit Mozilla.org

Core JavaScript 1.5 Reference:Global Objects:String

出典: MDC


目次

[編集] 概要

一続きの文字として扱われるオブジェクトを生成します。

[編集] 構文

new String()
new String(string)

String リテラルは以下の形式を取ります。:

'stringText'
"stringText"

[編集] 引数

string
任意の文字列
stringText
恐らくエンコードされている一続きの文字。

[編集] 説明

String オブジェクトは、new String() コンストラクタが呼び出されることによって、生成されます。String オブジェクトは、以下で記述されるメソッドを使って、プリミティブデータ型である、 Javascript の文字列をラップします。new を前につけずに呼び出されるグローバル関数 String() でも、プリミティブである文字列を生成することができます。JavaScript における文字列リテラルは、プリミティブな文字列です。

Javascript は String プリミティブと String オブジェクトを自動的に変換するので、String プリミティブである文字列上で String オブジェクトのあらゆるメソッドを呼ぶことができます。JavaScript は String プリミティブを一時的な String オブジェクトに自動的に変換してから、そのメソッドを呼び、そのあと、その一時的な String オブジェクトを捨てます。例えば、文字列リテラルから生成された String プリミティブ上で、String.length プロパティを使うことができます。:

s_obj.length;       // 3
s_prim.length;      // 3
s_also_prim.length; // 3
'foo'.length;       // 3
"foo".length;       // 3

(文字列リテラルを表すには、シングルもしくはダブルクオーテーションマークを使うことができます。)

String オブジェクトは String.valueOf() でプリミティブである文字列に変換することが可能です。

String プリミティブと String オブジェクトは、Javascript として評価されたとき、異なる結果を与えます。プリミティブはソースコードとして扱われ、一方、String オブジェクトは、文字がそのまま連続した状態のオブジェクトとして扱われます。例:

s1 = "2 + 2"; // String プリミティブを生成します
s2 = new String("2 + 2"); // String オブジェクトを生成します
eval(s1);     // 数字の 4 を返します
eval(s2);     // 文字列の "2 + 2" を返します
eval(s2.valueOf()); // 数字の 4 を返します

[編集] 文字へのアクセス

文字列内の個々の文字にアクセスするには、二つの方法があります。一つ目の方法は、charAt メソッドです。:

'cat'.charAt(1); // "a" を返します。

もう一つの方法は、文字列を配列として扱うことです。各々の添え字が個々の文字に対応します。:

return 'cat'[1]; // "a" を返します。
二つ目の方法(文字列を配列として扱う方法)は、ECMAScript の一部ではありません。これは、JavaScript の機能です。

両方の場合において、単一の文字を設定しようとしても、動作しないでしょう。charAt を通して文字を設定しようとすると、エラーになります。:

var x = 'cat';
x.charAt(0) = 'b'; // エラー

添え字から文字を設定するとエラーになりませんが、文字列自身は変化しません。:

var x = 'cat';
x[2] = 'p';
print(x);    // 依然として、 'cat' を出力します
print(x[2]); // 依然として、 't' を出力します

[編集] 文字列同士の比較

C 開発者は、文字列同士の比較のために strcmp() 関数を使います。JavaScript では、単純に、小なり及び大なり演算子を使ってください。 :

var a = "a";
var b = "b";
if (a < b) // 真
    print(a + " は " + b + " より小さい。");
else if (a > b)
    print(a + " は " + b + " より大きい。");
else
    print(a + " と " + b + " は等しい。");

同じような結果を、String インスタンスから継承される localeCompare を使用して得ることができます。

[編集] プロパティ

String インスタンスから継承されているプロパティについては、String インスタンスの プロパティ を参照してください

prototype
オブジェクトのプロトタイプを生成する関数を指定します。

Function.prototype から継承されるプロパティ
caller, constructor, length, name

[編集] メソッド

String インスタンスから継承されているメソッドについては、String インスタンスの メソッド を参照してください

fromCharCode
Unicode の値の指定されたシーケンスによって生成された文字列を返します。

Function.prototype から継承されるメソッド
apply, call, toSource, toString, valueOf

Object.prototype から継承されるメソッド
__defineGetter__, __defineSetter__, hasOwnProperty, isPrototypeOf, __lookupGetter__, __lookupSetter__, __noSuchMethod__, propertyIsEnumerable, unwatch, watch

[編集] String インスタンス

String インスタンスの全ては、String.prototype を継承します。String プロトタイプオブジェクトへの変更は、String インスタンスの全てに伝播します。

[編集] プロパティ

constructor
オブジェクトのプロトタイプを生成する関数を指定します。
length
文字列の長さを返します。
N
非標準
N 番目の文字にアクセスするために用いられます。N は、0 から length - 1 までの正の整数です。このプロパティは読み込み専用です。

[編集] メソッド

[編集] HTML に関連しないメソッド

charAt
指定された添え字の文字を返します。
charCodeAt
与えられた添え字の文字の Unicode の値を示す数を返します。
concat
2 つの文字列のテキストをつなげて、新しい文字列を返します。
indexOf
呼び出す String オブジェクト 中で、指定された値が最初に現れる添え字を返します。指定された値が見つからない場合は、-1 を返します。
lastIndexOf
呼び出す String オブジェクト 中で、指定された値が最後に現れる添え字を返します。指定された値が見つからない場合は、-1 を返します。
localeCompare
参照文字列が、並べ替え順において、与えられた文字列の前後にあるか、あるいは、同じかどうかを示します。
match
文字列に対する正規表現のマッチのために使用されます。
quote
非標準
文字列をダブルクォート (""")で囲みます。
replace
正規表現と文字列の間のマッチを見つけ、マッチした部分文字列を新しい部分文字列に置き換えるために使用されます。
search
正規表現と指定された文字列の間のマッチのための検索を実行します。
slice
文字列の一部分を取り出し、新しい文字列を返します。
split
文字列を複数の部分文字列に区切ることによって、String オブジェクトを文字列の配列に分割します。
substr
文字列において、指定された位置から指定された文字数の文字を返します。
substring
文字列において、文字列内の 2 つの添え字の間にある文字を返します。
toLocaleLowerCase
文字列内の文字を現在のロケールでの小文字に変換します。ほとんどの言語で、このメソッドは、toLowerCase と同じ結果を返します。
toLocaleUpperCase
文字列内の文字を現在のロケールでの大文字に変換します。ほとんどの言語で、このメソッドは、toUpperCase と同じ結果を返します。
toLowerCase
小文字に変換された文字列の値を呼び出して返します。
toSource
非標準
指定されたオブジェクトを表すオブジェクトリテラルを返します。この値を新しいオブジェクトを生成するために使用することができます。Object.toSource メソッドを上書きします。
toString
指定されたオブジェクトの文字列を返します。Object.toString メソッドを上書きします。
toUpperCase
大文字に変換された文字列の値を呼び出して返します。
valueOf
指定されたオブジェクトのプリミティブ値を返します。Object.valueOf メソッドを上書きします。

[編集] HTML ラッパーメソッド

非標準

以下のメソッドは、それぞれ、特定の HTML タグで囲まれた (wrapped) 文字列のコピーを返します。

anchor
<a name="name"> (ハイパーテキストターゲット)
big
<big>
blink
<blink>
bold
<b>
fixed
<tt>
fontcolor
<font color="color">
fontsize
<font size="size">
italics
<i>
link
<a href="url"> (URL へのリンク)
small
<small>.
strike
<strike>
sub
<sub>
sup
<sup>

これらのメソッドは、使用に制限があるメソッドで、利用可能なHTML タグと属性のサブセットのみを提供します。


Object.prototype から継承されるメソッド
__defineGetter__, __defineSetter__, hasOwnProperty, isPrototypeOf, __lookupGetter__, __lookupSetter__, __noSuchMethod__, propertyIsEnumerable, unwatch, watch


[編集]

[編集] 例:repeat メソッドを持つように文字列のインスタンスを拡張する

以下の例は、 str_rep というメソッドを生成し、String.prototype.repeat = str_rep という文を用いて、String オブジェクトの全てにそのメソッドを追加しています。String インスタンスの全てが、既に生成されていたとしても、そのメソッドを持つようになります。例では次に、その代わりとなるメソッドをを生成し、s1.repeat = fake_rep という文を用いて、String オブジェクトの一つで以前のメソッドを上書きしています。String オブジェクトに残っている str_rep メソッドは、置き換えられていません。

var s1 = new String("a");
var s2 = new String("b");
var s3 = new String("c");

// String オブジェクトの全てに対して「文字列を N 回繰り返す」メソッドを
// 生成します
function str_rep(n) {
   var s = "", t = this.toString();
   while (--n >= 0) {
     s += t
   }
   return s;
}

String.prototype.repeat = str_rep;

s1a=s1.repeat(3); // "aaa" を返します。
s2a=s2.repeat(5); // "bbbbb" を返します。
s3a=s3.repeat(2); // "cc" を返します。

// String 変数の一つだけに代入する代替メソッドを生成します。
function fake_rep(n) {
   return "repeat " + this + " " + n + " times.";
}

s1.rep = fake_rep
s1b=s1.repeat(1); // "repeat a 1 times." を返します。
s2b=s2.repeat(4); // "bbbb" を返します。
s3b=s3.repeat(6); // "cccccc" を返します。

この例での関数は、String コンストラクタで生成されていない String オブジェクトでも動作します。次のコードは、"zzz" を返します。

"z".repeat(3);