Nightly で ES.next で追加されている String.prototype の一部が実装された

ということで、以下のメソッドが追加された

  • String.prototype.startsWith( searchString [, position ])
  • String.prototype.endsWigth( searchString [, endPosition ])
  • String.prototype.contains( searchString [, position ])

いずれも、ES.next のドラフト Rev 8 で追記されたものだ。

また、どれも真偽値を返す。

String.prototype.startsWith

第二引数のpositionを除けば、return str.indexOf(searchString) === 0 と結果は変わらない*1。Boolean値で返って来るので条件分岐等で書きやすくなるだろう。

polyfill 的なの

String.prototype.startsWith = function (searchString, position) {
  return (typeof position === "number" && position ? this.substr(position) : this).indexOf(searchString) === 0;
}

String.prototype.endsWith

startsWith の対になるもの。まぁ想像できるでしょう。

polyfill 的なの(2012-10-20修正)

String.prototype.endsWith = function (searchString, endPosition) {
  var length = this.length - (typeof endPosition === "number" ? endPosition : 0);
  return this.substr(0, length).lastIndexOf(searchString) === (length - searchString.length);
}

String.prototype.contains

これも想像できるでしょう。

polyfill 的なの

String.prototype.contains = function (searchString, position) {
  return (typeof position === "number" && position ? this.substr(position) : this).indexOf(searchString) >= 0;
}

テストコード

使い方とか異常系とかはテストコードを見ると良いと思う。特に僕が書いたpolyfillコードは異常系に関してはあまり考慮してなくて、positionにNaNを渡すとどうなるの?とか考えていないので。

*1:indexOfと違ってstartsWithは最初の文字がマッチしなかった時点でfalseを返すので効率は良い