前端开发中的常用工具函数(七) 📅 2026/6/26 1:24:10 十七、startsWith()方法字符串前缀判断1. 基本语法startsWith()方法用于判断当前字符串是否以另外一个给定的子字符串开头并根据判断结果返回true或false。语法结构str.startsWith(searchString[, position])参数说明searchString必需。要搜索的子字符串。position可选。在str中搜索searchString的开始位置默认值为0。返回值布尔值。如果给定的字符在字符串的开头则返回true否则返回false。2. 基础示例为了快速理解我们来看两个简单的基础示例。示例 A不带第二个参数const str Hello, uni-app!; console.log(str.startsWith(Hello)); // 输出: true console.log(str.startsWith(uni-app)); // 输出: false (因为开头是 Hello)示例 B带第二个参数指定开始位置const str Hello, uni-app!; // 从索引 7 的位置开始判断是否以 uni 开头 console.log(str.startsWith(uni, 7)); // 输出: true3. 企业开发中的实际应用场景在企业级项目中startsWith往往能在一些关键逻辑中发挥重要作用。以下是几个典型场景场景一图片或资源路径判断在混合开发或全栈开发中我们经常需要区分图片是网络图片还是本地静态资源或者是 Base64 格式。function getImageSrc(url) { if (url.startsWith(http://) || url.startsWith(https://)) { // 处理网络图片逻辑 console.log(这是一个网络图片); } else if (url.startsWith(data:image/)) { // 处理 Base64 图片逻辑 console.log(这是一个 Base64 编码的图片); } else if (url.startsWith(/static/)) { // 处理本地图片逻辑 console.log(这是一个本地静态图片); } }场景二路由拦截与权限控制在单页应用SPA或小程序的路由守卫中可以通过判断 URL 前缀来进行模块级的权限拦截。function routeGuard(toPath) { const userRole getUserRole(); // 获取当前用户角色 // 拦截所有以 /admin 开头的路由 if (toPath.startsWith(/admin) userRole ! admin) { console.warn(警告您没有权限访问后台管理模块); return false; } // 拦截所有以 /vip 开头的路由 if (toPath.startsWith(/vip) !isVip()) { console.warn(警告该页面仅限 VIP 用户访问); return false; } return true; }场景三API 接口前缀区分在微服务架构下前端可能需要根据不同的接口前缀请求不同的后端服务网关。function request(url, data) { let baseURL ; if (url.startsWith(/user-service/)) { baseURL https://user-gateway.example.com; } else if (url.startsWith(/order-service/)) { baseURL https://order-gateway.example.com; } else { baseURL https://api.example.com; } return fetch(baseURL url, { body: JSON.stringify(data) }); }4. 注意事项与常见陷阱虽然startsWith很好用但在实际开发中如果不注意细节可能会掉进一些坑里。陷阱一大小写敏感startsWith是严格区分大小写的。如果用户的输入或抓取的数据大小写不确定直接使用可能会漏判。错误示例const str Hello World; str.startsWith(hello); // 返回 false因为 H 是大写正确做法在判断前统一转换为小写或大写。str.toLowerCase().startsWith(hello); // 返回 true陷阱二参数的隐式类型转换如果传入的searchString不是字符串类型JavaScript 会先将其转换为字符串这可能导致意想不到的结果。const str 12345; str.startsWith(1); // 返回 true (数字 1 被转换为了字符串 1) const obj { toString: () 12 }; str.startsWith(obj); // 返回 true建议在开发中尽量保证传入的是字符串类型或者做好类型校验。陷阱三浏览器兼容性问题startsWith是 ES6 (ES2015) 引入的方法。在现代浏览器和主流小程序环境中均完美支持但在一些老旧环境如 IE 11 及更早版本中不被支持。应对方案如果你的项目需要兼容老版本浏览器需要引入 Polyfill垫片或者使用 ES5 的写法替代// ES5 兼容写法 str.indexOf(target) 0;陷阱四误用position参数有些开发者会误以为position是“截取的长度”但实际上它是“开始查找的索引位置”。const str Hello World; // 误以为从 Hello (长度5) 之后开始找但实际上是直接在索引 5 处查找 str.startsWith( World, 5); // 返回 true因为索引5位置确实是 World 的开头