String 型を操作する場合、startsWith(anotherString) と endesWith(anotherString) は非常に便利なメソッドです。このうち、startsWith は現在の文字列が anotherString で始まるかどうかを決定し、endsWith はそれが終了するかどうかを決定します。例:
"abcd".startsWith("ab"); // true "abcd".startsWith("bc"); // false "abcd".endsWith("cd"); // true "abcd".endsWith("e"); // false "a".startsWith("a"); // true "a".endsWith("a"); // true
残念ながら、JavaScript にはこれら 2 つのメソッドが付属していないため、必要な場合にのみ自分で記述することができます。もちろん書くのは難しくありません。
if (typeof String.prototype.startsWith != 'function') { String.prototype.startsWith = function (prefix){ return this.slice(0, prefix.length) === prefix; }; }
String.slice() は、どちらも部分文字列を取得するという点で String.substring() に似ていますが、スライスの方が効率的であるというレビューもあります。ここで、indexOf() が使用されない理由は、文字列が非常に長い場合、indexOf は文字列全体をスキャンするため、indexOf の効率が非常に悪くなるからです。
if (typeof String.prototype.endsWith != 'function') { String.prototype.endsWith = function(suffix) { return this.indexOf(suffix, this.length - suffix.length) !== -1; }; }
startsWith とは異なり、endsWith ではindexOf を使用できます。その理由は、最後の文字列のみをスキャンするためであり、スライスよりも優れている点は、文字列をコピーする必要がなく、直接スキャンするだけでよいため、より効率的であることです。