# 【位运算与标签】
使用左运算符 << 通常可以定义标签。
使用 | 运算符可以组合标签。
使用 |= 运算符可以增加标签。
使用 & 运算符可以判断是否包含标签。
# 测试例子
export class TagTest {
static readonly APPLE = 1 << 0; //苹果
static readonly BANANA = 1 << 1; //香蕉
static readonly CAR = 1 << 2; //汽车
static readonly BUS = 1 << 3; //巴士
static readonly FRUIT = TagTest.APPLE | TagTest.BANANA;
static readonly VEHICLES = TagTest.CAR | TagTest.BUS;
public static testFunc() {
// 包含苹果和汽车的集合
let setA = 0;
setA |= TagTest.APPLE;
setA |= TagTest.CAR;
const findTagA = 0;
if (setA & findTagA) {
console.log("setA 包含 0");
} else {
console.log("setA 不包含 0"); // 会输出
}
const findTagB = TagTest.CAR;
if (setA & findTagB) {
console.log("setA 包含 CAR"); // 会输出
} else {
console.log("setA 不包含 CAR");
}
const findTagC = TagTest.CAR | TagTest.APPLE;
if (setA & findTagC) {
console.log("setA 包含 CAR 和 APPLE"); // 会输出
} else {
console.log("setA 不包含 CAR 和 APPLE");
}
const findTagD = TagTest.CAR | TagTest.BANANA;
if (setA & findTagD) {
console.log("setA 包含 CAR 或者 BANANA"); // 会输出
} else {
console.log("setA 不包含 CAR 或者 BANANA");
}
const findTagE = TagTest.BUS | TagTest.BANANA;
if (setA & findTagE) {
console.log("setA 包含 BUS 或者 BANANA");
} else {
console.log("setA 不包含 BUS 或者 BANANA"); // 会输出
}
if (setA & TagTest.VEHICLES) {
console.log("setA 中包含 交通工具"); // 会输出
}
if (setA & TagTest.FRUIT) {
console.log("setA 中包含 水果"); // 会输出
}
}
}
← 【TypeScript】 【面向对象思维】 →