在打字稿中编码时遇到了一个奇怪的问题。不知何故2> 100 == true(?)。
我无法弄明白......
这是我的代码:
if (!this.multipleYAxis) {
for (let d of this.getDatasources()) {
let options = this.getGraphTypeOption(d.id);
console.log(this.yMax + ' < ' + options.max);
console.log(this.yMax < options.max);
if (this.yMax < options.max)
this.yMax = options.max;
if (this.yMin > options.min)
this.yMin = options.min;
}
if (this.getChart().yAxis[1] != undefined) {
this.getChart().yAxis[1].update({
max: this.yMax
});
this.getChart().yAxis[1].update({
min: this.yMin
});
}
}
yMin和yMax声明如下:
private yMin: number = 0;
private yMax: number = 0;
选项声明如下:
export interface GraphTypeOption {
...
max: number;
min: number;
...
}
我正在测试的代码正在运行2个数据源。所以for循环会运行两次。
这是我的输出:
100 < 100
false
100 < 2
true
Chrome开发人员工具控制台中的唯一方法是我可以获得100&lt; 2为真是输入“100”&lt; “2”但正如您在我的声明this.yMax
和options.max
中看到的那样,显然是一种int / number。编译器甚至不喜欢我想明确地将它们转换为int,因为强制转换函数需要string类型的变量。
有谁知道造成这种麻烦的原因是什么?它是打字机 - &gt; javascript搞砸了吗?
答案 0 :(得分:6)
你可以在我的声明中看到this.yMax和options.max显然是一种int / number
然而,如果您将100 < 2
视为true
,那么您将比较字符串,尽管类型注释。使用调试器,检查您要比较的内容的值。您会发现他们是"100"
和"2"
,而不是100
和2
。然后,您可以找到它们作为字符串的根本原因。
无端的例子:
console.log("100" < "2"); // true
console.log(100 < 2); // false