即使值是true,打字稿相等也始终为false

时间:2018-12-26 07:13:46

标签: angular typescript

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

请在下面查看我的代码

即使值='Supervisor',选择也始终转到else方法。

<form id="form2" runat="server" autocomplete="off">

但是,如果我将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提示我一个错误==

任何建议都是值得的。谢谢stackoverflow。

更新 尝试其他解决方案。检查是否相同类型。但是仍然没有运气。请在下面查看更新的代码

== should be === tslint(triple-equals)

即使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);

第二次更新

我尝试同时打印valueof和tempvalue的typeof。

Log value: Supervisor

为什么会这样?在函数开始时,我已经声明value = object tempvalue = string

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在达到某种条件之前尝试修剪琴弦。

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();

答案 1 :(得分:0)

您正在使用value ==='Supervisor',这是一种严格的类型强制函数,它将测量值和类型为true的值,以使其为真。虽然==运算符仅比较值,而不是类型。

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