【问题标题】:What do comparison operators compare on arrays in javascript? [duplicate]比较运算符在javascript中的数组上比较什么? [复制]
【发布时间】:2016-02-11 00:27:14
【问题描述】:

我惊讶地发现两个数组的比较在 JavaScript 中返回一个布尔值。

var blah = [1,2,3];
var blah2 = [2,3,4,5];

document.write(blah < blah2);

老实说,我期待 NaN,但在我测试的每个浏览器中,我都得到了一致的“真实”结果。我找不到任何关于比较运算符对 JS 中的数组的作用的文档。在这种情况下比较的是什么?

【问题讨论】:

  • 数组被强制转换为字符串值,这实质上意味着调用.join()并比较结果。
  • 您期望 NaN 作为小于运算符的结果?所以你确实认为像 42 is NaN 而不是 666
  • 比较运算符永远不会返回NaN,它们总是返回一个布尔值。 NaN &lt; NaN 返回false
  • @Pointy 如果你把它作为答案,我会选择它。
  • @TobotRobot 谢谢 - 我一直在寻找一个副本,但我找不到一个好的。对于“JavaScript 关系运算符之谜”,我们确实需要一个全面的、易于理解的超级问题。

标签: javascript arrays comparison-operators


【解决方案1】:

我真的期待 NaN

没有。比较总是在 javascript 中返回一个布尔值(当它不抛出异常时)。
如果任何操作数不可比较(如NaN),它将返回false

在这种情况下比较的是什么?

abstract relation comparison algorithm 将所有参数转换为原始值以进行比较。对于您的数组,这会将它们转换为字符串,因此您实际上是在比较

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

【讨论】:

  • 虽然当我尝试使用NaN 参数时它返回false,但规范说在这种情况下它应该返回undefined
  • @Barmar:抽象算法返回undefined,这样实际算子总是可以返回false(不管是&lt;&lt;=&gt;还是&gt;=调用算法)
猜你喜欢
  • 2016-03-22
  • 1970-01-01
  • 2012-10-19
  • 2014-06-17
  • 2012-01-26
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多