登录
首页 >  文章 >  前端

indexOf简化判断技巧分享

时间:2026-05-09 15:45:59 336浏览 收藏

本文介绍了利用位运算符 `~`(按位取反)简化字符串存在性判断的实用技巧:由于 `indexOf()` 找不到时返回 `-1`,而 `~(-1) === 0`(假值),其余索引 `n` 均满足 `~n !== 0`(真值),因此 `if(~str.indexOf('x'))` 可以优雅替代冗长的 `if(str.indexOf('x') !== -1)`,显著提升代码简洁性和表达效率;该写法适用于兼容老环境、追求轻量或高频存在性校验的场景,虽牺牲了索引信息和部分可读性,但配合注释或用于工具函数中仍极具价值,甚至支持多条件组合判断,是前端开发中值得掌握的“少写几个字符却更有力”的小而美技巧。

如何利用 String.prototype.indexOf() 的位运算技巧 ~ 简化原始字符存在的判定

直接用 indexOf() 判定字符是否存在,不需要额外比较 !== -1 —— 用位运算 ~(按位取反)即可简洁转换。

为什么 ~ 能替代 !== -1

indexOf() 找不到时返回 -1,而 ~(-1) 等于 0(假值),其余非负索引 n 满足 ~n 恒为非零数(真值)。因此:
if (~str.indexOf('x')) 等价于 if (str.indexOf('x') !== -1),但更短、更函数式。

常见写法对比

  • 传统写法:str.indexOf('a') !== -1
  • 位运算写法:~str.indexOf('a')(在 if / while 中直接作为条件)
  • 注意:~ 是单目运算符,优先级高,无需括号:if (~str.indexOf('x')) 安全

适用场景与注意事项

  • 适合简单存在性判断,比如表单校验、关键词过滤、基础字符串扫描
  • 不适用于需要具体位置的逻辑——一旦用了 ~,原始索引就丢失了
  • 可读性略低,团队协作中建议加简短注释,或仅在工具函数/紧凑表达式中使用
  • ES6+ 更推荐 includes()(语义清晰、支持 Unicode),但 ~indexOf() 在需兼容老环境或追求极致体积时仍有价值

小技巧:组合多个判定

比如检查是否含字母 ab

if (~str.indexOf('a') || ~str.indexOf('b'))

比写成 str.indexOf('a') !== -1 || str.indexOf('b') !== -1 更紧凑,也避免重复调用。

今天关于《indexOf简化判断技巧分享》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>