javascriptにおけるString類のsubString()方法とslice()方法

1520 ワード

この本では2.8.4節において、String類のsubString()方法とslice()方法について述べましたが、その使い方と返却結果は基本的に同じです.
 
  
var strObj = new String("hello world");
alert(strObj.slice(3));   // :"ol world"
alert(strObj.subString(3));   // :"ol world"
alert(strObj.slice(3, 7)); // :"lo w"
alert(strObj.subString(3,7)); // :"lo w"
以上のコードの出力結果から分かるように、slice()メソッドとsubString()メソッドは出力結果と全く同じであり、これらの2つの方法は処理する文字列のサブストリングであり、1つまたは2つのパラメータを受け入れ、最初のパラメータは取得するサブストリングの開始位置であり、2つ目のパラメータはサブストリングの終了位置を取得することである.2番目のパラメータが終了位置を省略すると文字列の長さがデフォルトとなり、両方の方法はStringオブジェクト自体の値を変更しません.
なぜ二つの機能が全く同じ方法があるのですか?実際には,この二つの方法は全く同じではないが,パラメータが負の場合には,パラメータの扱い方が少し違っている.
負数パラメータに対して、slice()方法は文字列の長さにパラメータを加え、subString()法は0として処理します.
 
  
var strObj = new String("hello world");
alert(strObj.slice(-3));      // :"rld"
alert(strObj.subString(-3));    // :"hello world"
alert(strObj.slice(3,-4));     // :"lo w"
alert(strObj.subString(3,-4))   // :"hel"
これにより、slice()とsubString()の方法の大きな違いが見られます.パラメータ-3だけの場合、slice()は「rld」に戻り、subString()は「hello world」に戻ります.これは文字列「hello world」に対してslice(-3)がslice(8)に変換され、subString(-3)がsubString(0)に変換されるからです.同様に、3と-4の違いを使うことも明らかです.slice()方法はslice(3,7)に変換され、前の例と同じように「lo w」に戻ります.subString()方法は、この2つのパラメータをsubString(0,3)と解釈し、実際には、subString(0,3)は、subString()が小さいパラメータを常に開始ビットとしているため、大きな数字が最も終了ビットとなる.