【发布时间】:2012-06-07 10:49:37
【问题描述】:
if ('11' < '3') alert('true');
很明显,它不是通过长度来比较它们,而是通过编码来比较它们。但是,我不明白它是如何工作的。我需要一些解释:-)
【问题讨论】:
标签: javascript string comparison
if ('11' < '3') alert('true');
很明显,它不是通过长度来比较它们,而是通过编码来比较它们。但是,我不明白它是如何工作的。我需要一些解释:-)
【问题讨论】:
标签: javascript string comparison
比较字符串lexicographicaly。即逐个字符,直到它们不相等或没有任何字符可供比较。 '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
【讨论】:
'abc' < 'Abd' //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
【讨论】:
在许多编程语言中,字符串被比较为lexicographically。可以查看Alphabetical order
【讨论】:
按每个字符比较,下面是false:
if ('41' < '3') alert('true');
因为4 不小于3。所以基本上你的比较归结为:
if ('1' < '3') alert('true'); // true
【讨论】:
'1' < '3' 并且因为第一个字符是“最重要的字符”(并不是说这个术语有任何意义)。将不再比较任何以下字符。
【讨论】:
它已被视为字符串比较。所以 1
【讨论】: