JavaScript原生缺失startsWith与endsWith的自定义实现方案

作者:纸飞机时间:2026-10-29 10:50:38浏览:508

JavaScript原生未提供startsWith和endsWith方法,需手动实现。本文对比两种方案:startsWith利用slice截取子串进行比对,endsWith利用indexOf从指定位置扫描。分析指出indexOf在endsWith中无需复制字符串即可直接扫描,效率更高,适合长字符串处理。

JavaScript中startsWith与endsWith的实现原理

在处理字符串(String)类型数据时,startsWith(anotherString)和endsWith(anotherString)是极为实用的功能。前者用于检测当前字符串是否以anotherString作为开头,后者则用于判断是否以anotherString作为结尾。例如:


"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原生环境中并不包含这两个方法,开发者需要自行编写实现代码。尽管实现难度不大,但仍有必要了解其具体写法。


if (typeof String.prototype.startsWith != 'function') {
 String.prototype.startsWith = function (prefix){
  return this.slice(0, prefix.length) === prefix;
 };
}

String.slice()与String.substring()功能相似,均用于获取子串,但有评测表明slice的执行效率更高。此处未采用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。这是因为indexOf只需扫描字符串末尾的一段区域。相比slice方法,其优势在于无需复制字符串即可直接进行扫描操作,从而获得更高的执行效率。

作者最新文章