奇怪的结果javascript比较

strange results javascript comparison

本文关键字:javascript 比较 结果      更新时间:2023-09-26

我有一个javascript入门级问题。当执行以下命令时,结果是

真正的
有些数相等
编号,编号

numbernumbernumber

  1. 为什么前两个值不同?
  2. 为什么第一个是错的?

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>

要在JavaScript(或从语法上派生自B的任何其他语言)中进行复合比较,您不需要做以下操作:

(l>k>m)        // <=== Wrong

相反,如果您想知道l是否大于k并且k大于m,您可以使用&&(逻辑"and"运算符),如下所示:

(l>k && k>m)

细节:

你原来的表达式(l>k>m)分解成这样:

((l>k)>m)

这意味着你将得到这些:

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

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

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