Javascript等于===没有按预期工作

时间:2016-10-18 12:44:36

标签: javascript typescript ionic2

我正在使用Ionic2和Typescript开发应用程序。

我有以下代码:

  public showTick(message: Message): boolean {
      console.log('showTick: '+message+'  '+message.readByReceiver+'  '+this.senderId+'   '+message.senderId);
    if (message && message.readByReceiver === true && this.senderId && this.senderId === message.senderId) {
      console.log('showTick(' + message.content + '): return true');
      return true;
    }
    return false;
  }

输出以下内容:

showTick: [object Object]  true  P8   P8

我原本期望它进入if语句并打印:

showTick(xxx): return true

我使用===时出现了问题吗?

任何建议都表示赞赏。

P.S。这是Message模型:

  interface Message {
    _id?: string;
    chatId?: string;
    senderId?: string;
    ownership?: string;
    content?: string;
    createdAt?: Date;
    changeDate?: boolean;
    readByReceiver?: boolean;
  }

更新

我将代码更改为:

  public showTick(message: Message): boolean {
    console.log('showTick: ', message, message.readByReceiver, this.senderId, message.senderId);
    if (message) {
    console.log('showTick1 ');
      if (message.readByReceiver === true || message.readByReceiver === 'true') {
    console.log('showTick2 ');
        if (this.senderId) {
    console.log('showTick3 ');
          if (this.senderId === message.senderId) {
            console.log('showTick(' + message.content + '): return true');
            return true;
          }
        }
      }
    }
    return false;
  }

并获得以下ts错误(message.readByReceiver === 'true'):

ERROR in ./app/pages/messages/messages.ts
(275,46): error TS2365: Operator '===' cannot be applied to types 'boolean' and 'string'.

更新

问题似乎是boolean类型的对象持有string,因此以下内容对其进行了修复。

if (message.readByReceiver === true || message.readByReceiver+'' === 'true') 

两个问题:

  1. 这个修复对我来说似乎是一个黑客攻击。
  2. 我不确定为什么boolean持有string。这是个 对象来自定义为boolean的Meteor数据库。

1 个答案:

答案 0 :(得分:0)

我认为您需要从一些调试技术开始,以提供或收集更多信息。一个具体的,将是@andrecanilho和@deceze在问题评论中提出的建议。

您需要将if语句分解为多个输出,以确定逻辑分解的位置:

console.log(message.readByReceiver === true)
console.log(this.senderId === message.senderId)

在诊断出这两个陈述的输出后,我们(andre,deceze和I)猜测其中一个是假的......引导您找到一个可以自己解决的解决方案,或者可能提供更多反馈到Stack Overflow社区。

<强>更新

你无法在Typescript中将类型boolean(true)与字符串类型('true')进行比较。

更改此行:

if (message.readByReceiver === true || message.readByReceiver === 'true')

为:

if (message.readByReceiver === true)

此功能可帮助您诊断逻辑分解的位置:

public showTick(message: Message): boolean {
    console.log(message.readByReceiver === true);
    console.log(this.senderId === message.senderId)

    if (message && message.readByReceiver === true && this.senderId && this.senderId === message.senderId) {
      console.log('showTick(' + message.content + '): return true');
      return true;
    }
    return false;
  }