JavaScript原生缺失startsWith与endsWith的自定义实现方案
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方法,其优势在于无需复制字符串即可直接进行扫描操作,从而获得更高的执行效率。
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
