有人可以解释为什么条件'12:34' < '123:45'
是false
吗?
console.log('12:34' < '123:45' ? 'true' : 'false')
答案 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
由于:
具有较大的字符代码,因此该字符串被认为比另一个大。