javascript 中使用 indexof 检查子路径存在性失败的解决方案:`indexof()` 只能匹配数组中**完全相等的元素**,无法识别子字符串关系;当需判断某路径是否包含数组中的某个路由片段时,应改用 `findindex()` 配合 `includes()` 或正则表达式实现精准匹配。
在实际开发中(尤其是前端路由或权限校验场景),我们常需要判断当前 URL 路径(如 “/Authorization/ImpersonateUser”)是否“包含”某个预定义的敏感路径片段(如 “/ImpersonateUser”)。此时若错误地使用 Array.prototype.indexOf(),会始终返回 -1——因为 indexOf() 执行的是严格全等匹配,它查找的是与目标字符串完全一致的数组元素,而非子串关系。
例如以下代码:
const independentLocations = ['/home', '/login', '/ImpersonateUser'];
console.log(independentLocations.indexOf("/Authorization/ImpersonateUser")); // -1 ❌
虽然 /ImpersonateUser 出现在路径中,但数组里并无完全等于 “/Authorization/ImpersonateUser” 的项,因此匹配失败。
✅ 正确做法是使用 findIndex() 遍历数组,并结合字符串检测逻辑: