HarmonyOS Next中联合枚举类型的值与恒不等于的数字进行比较总是返回false是怎么回事?
enum E {
A = 0,
B = 1,
}
function doSomething(x: E) {
if (x === -1) {//一直返回false
// ...
}
}
HarmonyOS Next中联合枚举类型的值与恒不等于的数字进行比较总是返回false是怎么回事?
enum E {
A = 0,
B = 1,
}
function doSomething(x: E) {
if (x === -1) {//一直返回false
// ...
}
}
在TypeScript或JavaScript中,当你尝试将一个枚举类型的值与一个非枚举类型的值进行比较时,如你所示,将会总是返回false
。这是因为===
操作符在TypeScript和JavaScript中执行的是严格相等性检查,这意味着它不仅比较两个值的值,还比较它们的类型。
在你的例子中,x
是一个枚举类型E
的值,它可以是E.A
或E.B
,它们分别等于0
和1
。当你尝试将x
与-1
进行比较时,即使x
的值为0
或1
,由于x
的类型是E
,而-1
的类型是number
,所以它们的类型不同,因此x === -1
总是返回false
。
如果你想比较枚举类型的值与其底层数字值,你需要先将枚举值转换为数字,然后再进行比较。你可以使用Number
函数来将枚举值转换为数字。例如:
enum E {
A = 0,
B = 1,
}
function doSomething(x: E) {
if (Number(x) === -1) {
// 当x的底层数字值为-1时,这里的代码会执行
}
}
然而,请注意,由于你的枚举类型E
中并没有定义值为-1
的成员,因此Number(x) === -1
将永远不会为真。如果你需要处理这种情况,你可能需要修改你的枚举定义,或者使用一个不同的比较策略。
1 回答597 阅读
1 回答838 阅读✓ 已解决
1 回答459 阅读✓ 已解决
1 回答719 阅读✓ 已解决
1 回答428 阅读✓ 已解决
OpenHarmony SDK中TypeScript版本从4.2.3升级至4.9.5版本,支持TS语言的新语法特性以及提供更强的类型检查能力,但存在少数与之前版本不兼容的语法特性。
联合枚举类型:枚举的成员自动填充或简单写入,则视为联合枚举类型,这种情况下可以调用枚举可能表示的每个值。
建议将通过toString()方法将数字转换为字符串进行比较。