为什么 `"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
因为 :
有一个更大的字符代码,该字符串被认为比另一个更大。
有人可以解释为什么条件 '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
因为 :
有一个更大的字符代码,该字符串被认为比另一个更大。