【问题标题】:This condition will always return true when I try to check string value in Typescript当我尝试在 Typescript 中检查字符串值时,此条件将始终返回 true
【发布时间】: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


【解决方案1】:

如果数字是 32: 第一个条件是true。你得到true

如果数字是 0 或任何其他数字: 第一个条件是true。你得到true

如果数字是 33: 第一个条件是false。第二个条件是true。你得到true

这是存在错误的场景。只有在这种情况下,才会评估第二个条件。现在,您基本上是在比较 33 和 32,这是两个不同的值。 TS 意识到了这一点并给你no overlap 错误。

就像doing this

let x = true;
if(Math.random() > 0.5 || x == false){
  console.log("hi");
}

你想要的是:

  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");
  }

【讨论】:

    猜你喜欢
    • 2019-10-29
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-26
    • 2019-05-12
    相关资源
    最近更新 更多