JavaScript代码段如下:
var a = [1, 2, 3],
b = [1, 2, 3],
c = [1, 2, 4]
a == b
a === b
a > c
a < c
据我所知,因为数组是对象,当你使用'=='或'==='比较两个对象时,你实际上比较了它们的引用。所以a == b和a === b all都返回false。对?
考虑到> c和<c比较,我在Chrome中试过并且> c返回false,<c返回true。正如我用Google搜索的那样,“数组按字典顺序与>和<”进行比较。这是否意味着'a> c'在逻辑上等于:
for (var i = 0; i < Math.min(a.length, c.length); i++) {
if (a[i].toString() <= c[i].toString) return false;
}
return true;
我对吗?如果没有,任何人都可以帮助解释其背后的机制吗?非常感谢。
它将数组转换为字符串,然后按字典顺序对它们进行比较。将数组转换为字符串将返回array.join(',')
的结果,因此
[1, 2, 3] < [1, 2, 4]
相当于
"1,2,3" < "1,2,4"
对于数组,这实际上与循环相同。对于字符串数组,它可能不相同。
有关如何在比较运算符中执行强制的更多信息,请参阅How do the JavaScript relational comparison operators coerce types?