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

Why is `"12:34" < "123:45"` equal to `false`?

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

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

因为3:的ASCII码。我们知道字符串之间的比较会通过字典规则来完成。因此,由于第一个差异在两个字符串的第三个位置,因此 3: 的 ASCII 码将决定比较的结果。由于 : 的 ASCII 码大于 3,因此您会看到 false。下面是它们的ASCII码

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

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

因此,在您的情况下,第三个字符是 :3。现在,比较两者将导致 false - 3 大于 : (NaN) 假设它是否在步骤中按 Number 进行比较。事实上,JavaScript 将其与另一个答案中提到的 charCodeAt 进行了比较。无论哪种方式,它都是 false。你怎么认为这是真的?

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

: 出现在 3 之前时,JavaScript 假定您说的是 58 < 51,即 false

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

在第二个索引之前,字符串将相等,其中一个索引为 :,另一个索引为 3。将两者与 charCodeAt().

进行比较

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

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

因为 : 有一个更大的字符代码,该字符串被认为比另一个更大。