【问题标题】:Typescript equality always false even though value is true即使值为真,打字稿相等总是假
【发布时间】:2018-12-26 18:21:23
【问题描述】:

我开发了一个简单的打字稿来比较从下拉值传递的值。

请在下面查看我的代码

即使 value = 'Supervisor',选择总是转到 else 方法。

updateFilter(value: string): void {
// value = 'Supervisor'
if (value === 'Supervisor') {
  this.loading = true;
  this._dashboardservice.getAllSupervisor().subscribe(
    resp => {
      this.loading = false;
      this.listofmodules = Module [resp.length];
      this.listofmodules = resp;
    }
  );
} else {
  this._nzMessage.create('error', 'Only Supervisor are allowed at the moment');
}}

但如果我将 === 更改为 == 。一切正常,但是IDE提示我错误== should be === tslint(triple-equals)

感谢任何建议。谢谢stackoverflow。

更新 尝试更多解决方案。检查它是否相同类型。但仍然没有运气。请参阅下面的更新代码

updateFilter(value: string): void {
console.log('Log value: ' + value);

let tempvalue: string;
tempvalue = 'Supervisor';

if (value === tempvalue) {
  this.loading = true;
  this._dashboardservice.getAllSupervisor().subscribe(
    resp => {
      this.loading = false;
      this.listofmodules = Module [resp.length];
      this.listofmodules = resp;
    }
  );
} else {
  this._nzMessage.create('error', 'Only Supervisor are allowed at the moment');
}}

即使console.log('Log value: ' + value); 显示Log value: Supervisor

第二次更新

我尝试打印 value 和 tempvalue 的 typeof。

value = object
tempvalue = string

为什么会这样?在我的功能开始时,我已经声明value: string

有什么想法吗?

【问题讨论】:

  • 只是为了确认,两者是同一类型?
  • 如果您手动提供value = 'Supervisor' 而不是从下拉菜单中,那么它也会转到其他部分?
  • @ameruddinjamil === 表示完全相同的值,== 表示类似于检查您的值类型并检查大小写
  • @ashishpal 如果我手动给出值,它将转到 if 部分。你能告诉我为什么吗?
  • @Abhishek 那么,我应该增强代码的哪一部分?

标签: angular typescript


【解决方案1】:

您正在使用 value === 'Supervisor',这是一个严格的类型强制函数,它将衡量值和类型是否为真,以使其为真。而 == 运算符只比较值,不比较类型。

检查您的“值”类型,是否为字符串。仅当值也是一个字符串(与 tempvalue 相同)时,才会返回 true。

【讨论】:

  • 我尝试打印 typeof 值。显然,typeof 是对象而不是字符串。为什么会这样?
  • 尝试删除' : void ',然后再次检查类型
  • 或者,你可以试试这个。让值:字符串;更新过滤器(值)
【解决方案2】:

在传递到某些条件之前尝试修剪你的字符串。

value = value.trim();
tempvalue = tempvalue.trim();

对于调试,您可以在角度中使用escape() 函数来查看是否有额外的字符或符号(输出中未显示)。

点赞:

console.log(escape(value));

示例:

'Supervisor\r'    

其中,\r 是回车,不会在输出中显示为“\r”。它将显示为“主管”
但是,如果我使用console.log(escape(value));,那么它将显示为:

Supervisor%0D

在 console.log() 函数中。所以,我会知道,字符串中有多余的字符,大多数情况下可以通过trim()函数解决。


更新:

由于value 变量是对象类型,所以使用valueOf() 函数从对象中获取字符串值。然后你就可以比较了。

value = value.valueOf();

【讨论】:

  • 嗨@Saddam Pojee,谢谢你的回复。我正在按照您的指南使用 .trim()。但是在控制台中。它显示一个错误,“value.trim 不是 classname.html 的函数”我可以知道为什么会这样吗?
  • @ameruddinjamil 你必须在.ts 文件中编写trim() 函数。在updateFilter 函数中。
  • 嗨@Saddam Pojee,我有一个更新。显然,值 typeof 是 Object。为什么会发生这种情况?
  • @ameruddinjamil 这意味着当您调用updateFilter 函数时,您将其作为object 而不是string 传递。尝试在 updateFilter 函数中执行此操作:value = value.valueOf(); 或确保传递字符串而不是对象。
  • 实际上我正在传递一个事件。就像这样 updateFilter($event)
猜你喜欢
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 2019-12-24
  • 2014-08-02
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2022-07-21
相关资源
最近更新 更多