最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中 endsWith() 方法的使用解析
时间:2026-06-14 09:46:46 编辑:袖梨 来源:一聚教程网
endsWith() 是 JavaScript 字符串原生方法,用于判断字符串是否以指定子串结尾,返回布尔值,支持可选的长度参数,常用于条件过滤、权限校验等场景。
`endswith()` 是 javascript 字符串原生方法,用于判断字符串是否以指定子串结尾,返回布尔值,支持可选的长度参数,常用于条件过滤、权限校验等场景。
在前端开发中,String.prototype.endsWith() 是一个简洁高效的字符串匹配工具,尤其适用于处理具有固定后缀规则的标识符(如权限键名、路由路径、CSS 类名等)。它自 ES6(ECMAScript 2015)起成为标准 API,现代浏览器及 Node.js(≥4.0)均原生支持,无需 polyfill。
基本语法
str.endsWith(searchString[, length])
- searchString:必需,要搜索的子字符串;
- length:可选,指定在字符串的前 length 个字符内进行匹配(默认为字符串全长)。
实际应用示例(解决权限键过滤问题)
回到你的场景:你有一个权限映射对象 module_adlari,其中键名如 "bina-verisi:yazma" 包含 :yazma 后缀,而你在 DOM 操作中需跳过所有含 :yazma 的键,避免因 $("." + a) 解析 ".bina-verisi:yazma" 导致 jQuery 报错 Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: yazma(因 : 被误识别为 CSS 伪类)。
✅ 正确做法是在遍历前用 endsWith() 过滤:
if (!izinler.TASINMAZ_YONETICI) { for (const ad in Ayarlar.module_adlari) { if (!izinler[ad]) { const adlar = ad.split(","); adlar.forEach(a => { // ✅ 仅处理不以 ':yazma' 结尾的键名 if (!a.trim().endsWith(':yazma')) { $(`.${a.trim()}`).parent().remove(); } }); } }}
? 注意细节:
立即学习“Java免费学习笔记(深入)”;
- 使用 .trim() 防止空格干扰(如 "kira-verisi:yazma, gsm-verisi" 分割后 gsm-verisi 前可能有空格);
- endsWith() 区分大小写,:YAZMA 不会匹配 ':yazma';
- 若需兼容老旧环境(如 IE),可用 a.slice(-6) === ':yazma' 替代,但推荐优先使用原生方法。
更灵活的扩展方案
若需排除所有含冒号的键(不限于 :yazma),可改用 includes():
if (!a.trim().includes(':')) { $(`.${a.trim()}`).parent().remove();}
或结合正则实现更复杂规则(如排除 :okuma、:yazma、:silme):
if (!/:(okuma|yazma|silme)$/.test(a.trim())) { $(`.${a.trim()}`).parent().remove();}
总结
- endsWith() 是语义清晰、性能优良的字符串判断方法,比正则更轻量,比 slice() 更可读;
- 在权限控制、路由守卫、模板渲染等场景中,它是精准过滤后缀型标识符的首选;
- 务必配合 trim() 处理分割后的空白字符,并注意浏览器兼容性要求(必要时降级);
- 避免直接将未清洗的字符串拼入 CSS 选择器或 URL,这是引发运行时错误的常见根源。
掌握 endsWith(),让你的字符串逻辑更健壮、更易维护。
相关文章
- 通义千问开发者功能介绍:不同场景下的5种接入方式对比 06-14
- 这城有良田房玄龄技能加点指南 06-14
- 三国天下归心许诸单点爆杀流怎么玩 06-14
- 通义千问开发者适合哪些场景?3种开发环境接入对比 06-14
- 死神境界刀鸣正式推出时间公布 06-14
- 疯狂水世界BOSS阵容如何搭配 06-14