为什么string“11”比string“3”less?

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

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

string按字符进行比较,直到不相等或者没有任何字符需要比较。 “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 

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

它由每个字符比较,以下将是false

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

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

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

'1' < '3' ,因为第一个字符是“最重要的字符”(不是这个词是有意义的)。 任何以下的字符将不会被比较。

默认情况下,JavaScript将通过每个字符的序号值来比较两个string; 很像strcmp()在C中工作

为了使你的比较工作,你可以投给任何一方数字告诉解释器你的数字比较的意图:

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

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