打字稿:2> 100 == true

时间:2016-12-12 10:57:19

标签: javascript typescript

在打字稿中编码时遇到了一个奇怪的问题。不知何故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.yMaxoptions.max中看到的那样,显然是一种int / number。编译器甚至不喜欢我想明确地将它们转换为int,因为强制转换函数需要string类型的变量。

有谁知道造成这种麻烦的原因是什么?它是打字机 - &gt; javascript搞砸了吗?

1 个答案:

答案 0 :(得分:6)

  

你可以在我的声明中看到this.yMax和options.max显然是一种int / number

然而,如果您将100 < 2视为true,那么您将比较字符串,尽管类型注释。使用调试器,检查您要比较的内容的值。您会发现他们是"100""2",而不是1002。然后,您可以找到它们作为字符串的根本原因。

无端的例子:

console.log("100" < "2"); // true
console.log(100 < 2);     // false