为什么字符串“11”比字符串“3”小

Why is string "11" less than string "3"?

本文关键字:字符串 为什么      更新时间:2023-09-26
if ('11' < '3') alert('true');

很明显,它不是通过长度比较它们,而是通过编码来比较它们。但是,我不明白它是如何工作的。我需要一些解释:-)

字符串按字典顺序进行比较。 即逐个字符,直到它们不相等或没有任何字符可以比较。"11"的第一个字符小于"3"的第一个字符。

> '11' < '3'
true
> '31' < '3'
false
> '31' < '32'
true
> '31' < '30'
false

如果我们使用字母那么,由于b不小于aabc不小于aaa,但由于c小于dabc小于abd

> 'abc' < 'aaa'
false
> 'abc' < 'abd'
true

您可以显式将字符串转换为数字:

> +'11' < '3'
false

默认情况下,JavaScript 会根据每个字符的序号值比较两个字符串;就像strcmp()在 C 中的工作方式非常相似。

为了使您的比较起作用,您可以将任何一侧投射到一个数字上,以告诉解释器您进行数字比较的意图:

Number('11') < '3' // false
+'11' < '3' // false, using + to coerce '11' to a numeric
'11' < Number('3') // false
'11' < +'3' // false

在许多编程语言中,字符串被按字典顺序进行比较。您可以检查字母顺序

它按每个字符进行比较,将false以下内容:

if ('41' < '3') alert('true');

由于4不少于3.所以基本上你的比较归结为:

if ('1' < '3') alert('true'); // true
'1' < '3'

因为第一个字符是"最重要的字符"(并不是说这个术语有任何意义)。以下任何字符将不再比较。

它被视为字符串比较。所以 1 <3(两个字符串的第一个字符)然后字符串 11 在字符串 3 之前