为什么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
不小于a
, abc
不小于aaa
,但由于c
小于d
, abc
小于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之前