奇怪的结果javascript比较

时间:2014-05-03 15:19:28

标签: javascript

我有一个关于javascript的入门级问题。执行以下操作时,结果为

真正
有些数字相等 号码,号码

numbernumbernumber

  1. 为什么前两个值不同?
  2. 为什么第一个错了?
  3. JS:

    function sort3(a, b, c) 
    {
        document.getElementById("output").innerHTML = 
            (typeof a) + (typeof b) + (typeof c);
        if(a > b > c) { return [a, b, c];
        else if(a > c > b) return [a, c, b];
        else if(c > a > b) return [c, a, b];
        else if(c > b > a) return [c, b, a];
        else if(b > c > a) return [b, c, a];
        else if(b > a > c) return [b, a, c];
        else return "Some numbers are equal";
    }
    

    HTML:

    <p id="ex1"></p>
    <p id="output"></p>
    <script type="text/javascript">
        var m = parseFloat(1);
        var k = parseFloat(2);
        var l = parseFloat(3);
        var q = typeof m;
        var w = typeof k;
        var e = typeof l;
        var res1 = (l>k>m) + "</br>";
        res1 += (m<k<l) + "</br>";
        var res2 = sort3(m,k,l) + "</br>";
        var res3 = (typeof m) + ", " + (typeof Number(m))
        document.getElementById("ex1").innerHTML = res1 + res2 + res3;
    </script>
    

1 个答案:

答案 0 :(得分:1)

要在JavaScript(或从B语法派生的任何其他语言)中进行复合比较,你不要做像

这样的事情。
(l>k>m)        // <=== Wrong

相反,如果您想知道l是否大于kk大于m,则使用&&(逻辑“和“运营商”,像这样:

(l>k && k>m)

详细说明:

您的原始表达式(l>k>m)分解为:

((l>k)>m)

这意味着你会得到其中一个:

(true>m)
// or
(false>m)

将布尔值与数字进行比较时,布尔值被强制转换为数字,因此生效:

(1>m)
// or
(0>m)