优先使用 startswith 和 endswith 替代手动切片或正则匹配,代码更清晰、性能更优;支持起始位置和长度参数,可配合数组 some/every 批量判断,现代环境原生支持,仅需注意旧版 ie 兼容性。

直接用 startsWith 和 endsWith 替代手动切片或正则匹配,代码更清晰、性能更好,尤其在判断固定前缀/后缀时。
避免 substring + === 的冗余写法
过去常这样判断前缀:
str.substring(0, 3) === 'abc'
但 substring 可能越界,还要算长度,易出错。换成:
-
str.startsWith('abc')—— 简洁安全,空字符串也返回 true - 支持第二个参数指定起始位置,比如
str.startsWith('def', 3)表示从索引 3 开始检查是否以 'def' 开头
替代正则实现简单后缀判断
想判断文件扩展名?别急着写 /\.js$/.test(str):
-
str.endsWith('.js')更直观,无正则开销,可读性高 - 注意:它不会自动忽略大小写,如需忽略,先转小写:
str.toLowerCase().endsWith('.js') - 也支持长度参数,例如
str.endsWith('txt', 10)表示只检查前 10 个字符的结尾
配合数组和 some/every 提升批量判断效率
检查多个前缀或后缀时,不用写一堆 ||:
- 判断是否以任意一个前缀开头:
['http', 'https'].some(p => url.startsWith(p)) - 判断是否同时满足多个后缀(极少见)可用
every;更多是用some做白名单校验 - 比手写循环或正则
test调用更语义化,V8 等引擎对这些方法做了专门优化
注意兼容性和降级处理
IE 不支持这两个方法,但现代项目基本无需考虑。若需兼容:
- 用 polyfill(如 MDN 提供的简易版),或引入 core-js
- Node.js 从 v4+、Chrome v41+、Firefox v17+ 已原生支持,无需额外处理
- TypeScript 中确保
lib配置包含es2015或更高版本,否则类型报错











