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コードは異常系に関してはあまり考慮してなくて、NaN
を渡すとどうなるの?とか考えていないので。
- startsWith, endsWith のテストコード: https://hg.mozilla.org/mozilla-central/rev/6f89406dc763
- contains のテストコード : https://hg.mozilla.org/mozilla-central/rev/87e7abe891a9
*1:indexOfと違ってstartsWithは最初の文字がマッチしなかった時点でfalseを返すので効率は良い