JavaScriptのSteringタイプ
5809 ワード
JavaScriptのSteringタイプ
Stringタイプは文字列の対象包装タイプで、以下のようにString構造関数を用いて作成できます.
Stringオブジェクトの方法は、すべての基本的な文字列値においてもアクセス可能である.ここで、継承されたvalueOf()、toLocale-String()とtoStering()の方法は、オブジェクトが表す基本文字列値を返します.
Stringタイプの各例には、文字列に複数の文字が含まれていることを意味するlength属性があります.
Stringタイプは、ECMAScriptにおける文字列の解析と動作の完了を支援する多くの方法を提供する.
1.文字の方法
文字列内の特定文字にアクセスするための2つの方法は、charAt()とcharCodeAt()である.この2つの方法はいずれも1つのパラメータ、すなわち0に基づく文字位置を受信する.ここで、charAt()メソッドは、指定された位置の文字(ECMAScriptには文字タイプがありません).
ECMAScript 5はまた、別の個別文字にアクセスする方法を定義しています.この方法をサポートするブラウザでは、四角い括弧と数字の索引を使って文字列の特定の文字にアクセスできます.
2.文字列の操作方法
最初はconcat()で、1つ以上の文字列をつなぎ合わせて、スティッチングした新しい文字列を返します.
ECMAScriptはまた、サブ文字列に基づいて新しい文字列を作成する3つの方法を提供しています.12の3つの方法は、操作された文字列のサブ文字列を返します.また、1つまたは2つのパラメータも受け入れられます.最初のパラメータはサブ文字列の開始位置を指定し、第二のパラメータ(指定された場合)はサブ文字列がどこで終了するかを表します.具体的には、slice()とsubstring()の2番目のパラメータは、サブ文字列の最後の文字の後ろの位置を指定します.substr()の2番目のパラメータは、戻る文字の個数を指定します.これらの方法に第二のパラメータを渡さない場合、文字列の長さを終了位置とします.concat()方法と同様に、slice()、substr()やsubstring()も文字列自体の値を変更しません.それらは基本タイプの文字列値を返すだけで、元の文字列には何の影響もありません.
これらの方法に伝達されるパラメータが負の値である場合,それらの挙動は異なる.ここで、slice()方法は、入力された負の値を文字列の長さに加算し、substr()法は負の最初のパラメータに文字列の長さを加算し、負の2番目のパラメータを0に変換する.最後にsubstring()法は負のパラメータをすべて0に変換します.
二つ目のパラメータが負の値である場合、この3つの方法の挙動はそれぞれ異なる.slice()メソッドは、2番目のパラメータを7に変換します.これは、slice(3,7)を呼び出したのと同じです.したがって、「lo w」に戻ります.substring()メソッドは、2番目のパラメータを0に変換して呼び出しをsubstring(3,0)にしますが、この方法は小さい数を開始位置として、大きな数を終了位置としますので、最終的にはsubstring(0,3)を呼び出しました.substr()も第二のパラメータを0に変換します.つまりゼロ文字を含む文字列、つまり空の文字列を返します.
3.文字列の位置方法
文字列からサブ文字列を検索する方法が二つあります.indexOf()とlastIndexOf().これらの2つの方法は、1つの文字列から与えられたサブ文字列を検索し、サブ文字列の位置を返します.この2つの方法の違いは、indexOf()メソッドが文字列の先頭から後にサブ文字列を検索し、lastIndexOf()メソッドが文字列の最後から前にサブ文字列を検索することである.
この2つの方法は、文字列のどの位置から検索を開始するかを示すオプションの第2のパラメータを受信することができる.言い換えれば、indexOf()は、パラメータで指定された位置から後方に検索し、その位置の前のすべての文字を無視します.また、lastIndexOf()は指定された位置から前へ検索し、その位置から後のすべての文字を無視します.
Stringタイプは文字列の対象包装タイプで、以下のようにString構造関数を用いて作成できます.
Stringオブジェクトの方法は、すべての基本的な文字列値においてもアクセス可能である.ここで、継承されたvalueOf()、toLocale-String()とtoStering()の方法は、オブジェクトが表す基本文字列値を返します.
Stringタイプの各例には、文字列に複数の文字が含まれていることを意味するlength属性があります.
var stringValue = "hello world";
alert(stringValue.length); //"11"
この例は、文字列「ハローワールド」の文字数、すなわち「11」を出力します.なお、2バイトの文字列(1バイト分のASCII文字ではない)が含まれていても、各文字は1文字としてカウントされます.Stringタイプは、ECMAScriptにおける文字列の解析と動作の完了を支援する多くの方法を提供する.
1.文字の方法
文字列内の特定文字にアクセスするための2つの方法は、charAt()とcharCodeAt()である.この2つの方法はいずれも1つのパラメータ、すなわち0に基づく文字位置を受信する.ここで、charAt()メソッドは、指定された位置の文字(ECMAScriptには文字タイプがありません).
var stringValue = "hello world";
alert(stringValue.charAt(1)); //"e"
文字列「hello world」の位置1の文字は「e」であるため、charAt(1)を呼び出して「e」に戻ります.文字ではなく文字コードがほしいなら、次のようにcharCodeAtを使います.var stringValue = "hello world";
alert(stringValue.charCodeAt(1)); // "101"
この例は「101」、つまり小文字「e」の文字コードを出力します.ECMAScript 5はまた、別の個別文字にアクセスする方法を定義しています.この方法をサポートするブラウザでは、四角い括弧と数字の索引を使って文字列の特定の文字にアクセスできます.
var stringValue = "hello world";
alert(stringValue[1]); //"e"
括弧表現を使用して個々の文字にアクセスする文法は、IE 8およびFirefox、Safari、Chrome、およびOperaのすべてのバージョンのサポートを受けています.このようなシンタックスは、IE 7およびより早いバージョンで使用されると、undefined値に戻ります.2.文字列の操作方法
最初はconcat()で、1つ以上の文字列をつなぎ合わせて、スティッチングした新しい文字列を返します.
var stringValue = "hello ";
var result = stringValue.concat("world"); alert(result); //"hello world" alert(stringValue); //"hello"
この例では、strigValueでconcatを呼び出して返した結果、「hello world」となりますが、strigValueの値はそのままです.実際には、concat()方法は、任意の複数のパラメータを受け入れることができ、つまり、その9を介して任意の複数の文字列をつなぎ合わせることができる.var stringValue = "hello ";
var result = stringValue.concat("world", "!");
alert(result); //"hello world!" alert(stringValue); //"hello"
この例は「world」と「!」を「hello」の末尾につなぎました.concat()は文字列をつなぎ合わせるための方11法ですが、実際にはもっと多いのがプラス記号(+)です.また、番号付け操作子を使用する場合は、ほとんどの場合、concat()方法を使用するよりも簡単に操作できます(特に複数の文字列をつなぎ合わせた場合).ECMAScriptはまた、サブ文字列に基づいて新しい文字列を作成する3つの方法を提供しています.12の3つの方法は、操作された文字列のサブ文字列を返します.また、1つまたは2つのパラメータも受け入れられます.最初のパラメータはサブ文字列の開始位置を指定し、第二のパラメータ(指定された場合)はサブ文字列がどこで終了するかを表します.具体的には、slice()とsubstring()の2番目のパラメータは、サブ文字列の最後の文字の後ろの位置を指定します.substr()の2番目のパラメータは、戻る文字の個数を指定します.これらの方法に第二のパラメータを渡さない場合、文字列の長さを終了位置とします.concat()方法と同様に、slice()、substr()やsubstring()も文字列自体の値を変更しません.それらは基本タイプの文字列値を返すだけで、元の文字列には何の影響もありません.
var stringValue = "hello world";
alert(stringValue.slice(3));
alert(stringValue.substring(3));
alert(stringValue.substr(3));
alert(stringValue.slice(3, 7));
alert(stringValue.substring(3,7));
alert(stringValue.substr(3, 7));
//"lo world"
//"lo world"
//"lo world"
//"lo w"
//"lo w"
//"lo worl"
この例は、slice()、substr()とsubstring()を同じように呼び出して得られた結果を比較しており、多くの場合、結果は同じである.パラメータ3のみを指定した場合、この3つの方法は「lo world」に戻ります.「hello」の2番目の「l」が位置3にあるからです.2つのパラメータ3と7を指定した場合、slice()とsubstring()は「lo w」(「world」の「o」が位置7にあるため、結果として「o」は含まれませんでしたが、substr()は「loworll」に戻ります.2番目のパラメータは返す文字の個数を指定しています.これらの方法に伝達されるパラメータが負の値である場合,それらの挙動は異なる.ここで、slice()方法は、入力された負の値を文字列の長さに加算し、substr()法は負の最初のパラメータに文字列の長さを加算し、負の2番目のパラメータを0に変換する.最後にsubstring()法は負のパラメータをすべて0に変換します.
var stringValue = "hello world";
alert(stringValue.slice(-3));
alert(stringValue.substring(-3));
alert(stringValue.substr(-3));
alert(stringValue.slice(3, -4));
alert(stringValue.substring(3, -4));
alert(stringValue.substr(3, -4));
//"rld" //"hello world" //"rld"
//"lo w" //"hel" //""( )
この例は上記3つの方法の間の異なる挙動を明確に示している.slice()とsubstr()に負のパラメータを渡す時、それらの挙動は同じです.これは-3が8(文字列長プラスパラメータ11+(3)=8)に変換されるため、実際にはslice(8)とsubstr(8)を呼び出したのに相当する.しかし、substring()方法は、-3を0に変換するために、すべての文字列を返します.二つ目のパラメータが負の値である場合、この3つの方法の挙動はそれぞれ異なる.slice()メソッドは、2番目のパラメータを7に変換します.これは、slice(3,7)を呼び出したのと同じです.したがって、「lo w」に戻ります.substring()メソッドは、2番目のパラメータを0に変換して呼び出しをsubstring(3,0)にしますが、この方法は小さい数を開始位置として、大きな数を終了位置としますので、最終的にはsubstring(0,3)を呼び出しました.substr()も第二のパラメータを0に変換します.つまりゼロ文字を含む文字列、つまり空の文字列を返します.
3.文字列の位置方法
文字列からサブ文字列を検索する方法が二つあります.indexOf()とlastIndexOf().これらの2つの方法は、1つの文字列から与えられたサブ文字列を検索し、サブ文字列の位置を返します.この2つの方法の違いは、indexOf()メソッドが文字列の先頭から後にサブ文字列を検索し、lastIndexOf()メソッドが文字列の最後から前にサブ文字列を検索することである.
var stringValue = "hello world";
alert(stringValue.indexOf("o")); //4
alert(stringValue.lastIndexOf("o")); //7
サブ文字列「o」の最初の出現位置は4です.すなわち「ハロー」の「o」です.最後に出現したのは7です.すなわち「world」の「o」です.この文字列に「o」が一回だけ現れたら、indexOf()とlastIndexOf()は同じ位置値を返します.この2つの方法は、文字列のどの位置から検索を開始するかを示すオプションの第2のパラメータを受信することができる.言い換えれば、indexOf()は、パラメータで指定された位置から後方に検索し、その位置の前のすべての文字を無視します.また、lastIndexOf()は指定された位置から前へ検索し、その位置から後のすべての文字を無視します.
var stringValue = "hello world";
alert(stringValue.indexOf("o", 6)); //7
alert(stringValue.lastIndexOf("o", 6)); //4
この2つの方法に第2のパラメータ6を渡すと、前の例とは逆の結果が得られる.今回は、位置6(アルファベット「w」)から後方検索を開始したindexOfの結果、位置7で「o」が見つかったので、7に戻ります.また、last−IndexOf()は、位置6から前の方向へ検索を開始する.その結果、「ハロー」の「o」が見つかったので、4に戻ります.第二のパラメータを使用する場合、indexOf()またはlastIndexOf()を循環的に呼び出すことによって、一致するすべてのサブ文字列を見つけることができます.var stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit"; var positions = new Array();
var pos = stringValue.indexOf("e");
while(pos > -1){
positions.push(pos);
pos = stringValue.indexOf("e", pos + 1);
}
alert(positions); //"3,24,32,35,52"
この例は、indexOf()法を継続的に増加させることによって検索を開始し、長い文字列を巡回した.ループの外に、まず「e」の文字列の初期位置が見つかりました.サイクルに入ると毎回indexOf()に前回の位置を伝えて1を加えます.このようにして、新しい検索は毎回前に見つけたサブ文字列の後ろから始まることを確認しました.検索のたびに返される位置は、将来の使用のために配列positionsに順次保存されます.