if ('11' < '3') alert('true');
很明显,它不是通过长度来比较它们,而是通过编码来比较它们。但是,我不明白它是如何工作的。我需要一些解释:-)
if ('11' < '3') alert('true');
很明显,它不是通过长度来比较它们,而是通过编码来比较它们。但是,我不明白它是如何工作的。我需要一些解释:-)
字符串按字典顺序进行比较。即逐个字符,直到它们不相等或没有任何字符可供比较。“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
您可以将字符串显式转换为数字:
> +'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 之前