【发布时间】:2021-07-30 19:33:38
【问题描述】:
我有一个 phone 变量,它的类型是 number。我需要检查前两位是否不等于 33 或 32,所以我将其转换为字符串,然后存储第一位和第二位进行比较。
let phoneText = this.phone.toString();
let digit1 = phoneText.charAt(0);
let digit2 = phoneText.charAt(1);
let twoDigits: string = digit1+digit2;
if ( (twoDigits!= "33") || (twoDigits!= "32") ){
alert("Invalid");
}
但是,我收到有关 if 语句的错误消息,但我不明白问题出在哪里。
This condition will always return 'true' since the types '"33"' and '"32"' have no overlap.ts(2367)
let start: "33"
【问题讨论】:
-
您的条件将始终返回 true,因为即使是 33 或 32 也会为该语句生成 true,更不用说 17。您想否定整个事情并使用 && 而不是 ||
-
如果
twoDigits是"32",那么它就不是"33"。如果twoDigits是"33",那么它就不是"32"。 -
你想要
(twoDigits != "33") && (twoDigits != "32")。或者(德摩根的):!((twoDigits == "33") || (twoDigits == "32")). -
另外,考虑使用
String.prototype.substring()代替charAt()两次然后连接:let twoDigits: string = phoneText.substring(0, 2);
标签: javascript angular typescript