JavaScript中按位与(&)用于权限校验:判断单权限用userPerms & READ !== 0,排除权限需配合~如userPerms &= ~ADMIN,验证多权限须用(userPerms & (READ | WRITE)) === (READ | WRITE),截断高位用userPerms & 0xFF。

JavaScript 中按位与运算符(&)本身不直接“过滤”,而是用于校验或提取特定权限位。所谓“过滤权限”,实际是指:判断某权限是否存在、排除某权限、或保留一组指定权限——这些操作都依赖 & 配合其他位运算符(如 ~)协同完成。
用 & 判断是否拥有某项权限
这是最基础也最常用的场景。每个权限对应一个 2 的幂(如 READ = 1、WRITE = 2、DELETE = 4),确保二进制中仅一位为 1。
-
userPerms & READ结果非零 → 用户有读权限 -
userPerms & DELETE结果为 0 → 用户没有删除权限 - 注意:不能写成
(userPerms & READ) === true,应写成!!(userPerms & READ)或(userPerms & READ) !== 0
用 & 和 ~ 联合实现“排除某权限”
想从当前权限集中移除某个权限(比如去掉 ADMIN),本质是把对应位清零。单靠 & 不行,必须搭配取反 ~ 构造掩码:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const ADMIN = 8; // 0b1000userPerms = userPerms & ~ADMIN;- 解释:
~ADMIN得到一个除第 4 位外全为 1 的掩码(如~8 → ...11110111),再与原值&,就能安全清零该位,其余位保持不变
用 & 验证是否同时具备多个权限
要确认用户是否“同时拥有读+写”,不能链式写 userPerms & READ & WRITE(这会先算 userPerms & READ,再和 WRITE 做与,逻辑错误)。
立即学习“Java免费学习笔记(深入)”;
- 正确写法:
(userPerms & (READ | WRITE)) === (READ | WRITE) - 原理:先用
|合并目标权限(得到一个多位为 1 的掩码),再用&提取用户实际拥有的这部分位,最后比对是否完全一致 - 若只需“至少有一个”,则写成:
!!(userPerms & (READ | DELETE))
用 & 提取低 N 位做权限截断(边界防护)
当权限值可能超出设计范围(比如只定义了前 8 种权限),可用 & 加掩码强制保留有效位:
- 假设最多支持 8 种权限(即 bit0–bit7),掩码为
0xFF(0b11111111) -
userPerms = userPerms & 0xFF;→ 自动丢弃高位,防止越界权限被误判 - 类似地,提取低 4 位:
n & 0b1111或n & 15

















