这个JavaScript代码段是如何处理的?

时间:2018-03-02 01:33:46

标签: javascript arrays comparison

JavaScript代码段如下:



var a = [1, 2, 3],
    b = [1, 2, 3],
    c = [1, 2, 4]
a ==  b
a === b
a >   c
a <   c
&#13;
&#13;
&#13;

据我所知,因为数组是对象,当您使用&#39; ==&#39;比较两个对象时或者&#39; ===&#39;,你实际比较他们的参考。所以a == b和a === b all都返回false。正确?

考虑&gt; c和a&lt; c比较,我在Chrome中尝试了一个&gt; c返回false,a&lt; c返回true。当我用Google搜索时,&#34;数组按字典顺序与&gt;进行比较。并且&lt;&#34;。这是否意味着&#39; a&gt; C&#39;逻辑上等于:

&#13;
&#13;
for (var i = 0; i < Math.min(a.length, c.length); i++) {
   if (a[i].toString() <= c[i].toString)   return false;
}
return true;
&#13;
&#13;
&#13;

我是对的吗?如果没有,任何人都可以帮助解释其背后的机制吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

它将数组转换为字符串,然后按字典顺序对它们进行比较。将数组转换为字符串将返回array.join(',')的结果,因此

[1, 2, 3] < [1, 2, 4]

相当于

"1,2,3" < "1,2,4"

对于一组数字,这实际上与你的循环相同。它可能与字符串数组不相同。

有关如何在比较运算符中执行强制操作的详细信息,请参阅How do the JavaScript relational comparison operators coerce types?