为什么““ 12:34” <“ 123:45”`等于`false`?

时间:2020-08-03 21:42:21

标签: javascript string comparison lexicographic

有人可以解释为什么条件'12:34' < '123:45'false吗?

console.log('12:34' < '123:45' ? 'true' : 'false')

4 个答案:

答案 0 :(得分:6)

由于3:的ASCII码。我们知道字符串之间的比较将由字典规则完成。因此,由于第一个差异位于两个字符串的第三位置,因此3:的ASCII码将确定比较的结果。由于:的ASCII码大于3,因此您会看到错误的结果。请在下面查看它们的ASCII代码。

console.log(":".charCodeAt(0));
console.log("3".charCodeAt(0));

答案 1 :(得分:1)

字符串中不仅有数字,所以它将与字符串而不是数字进行比较。比较字符串时,它开始一个一个地求值。

因此,在您的情况下,第三个字符是:3。现在,假设两者均按数字进行比较,则比较两者将得出false-3大于:(NaN)。实际上,JavaScript将其与charCodeAt进行了比较,如另一个答案中所述。无论哪种方式,它都是false。您如何期望它是真的?

答案 2 :(得分:1)

"3"的ASCII码为51":"的ASCII码为58

:3之前时,JavaScript会假设您是在说58 < 51,即false

答案 3 :(得分:1)

我在此page上发现,如果您比较两个字符串,JavaScript“会在字符串中按数字一一比较字符代码。”

字符串将一直相等,直到第二个索引(其中一个索引为:,另一个索引为3)为止。将两者与charCodeAt()进行比较。

'12:34'.charCodeAt(2) // => 58

'123:34'.charCodeAt(2) // => 51

由于:具有较大的字符代码,因此该字符串被认为比另一个大。

相关问题