之前在刷codewar的时候遇到了这个问题,后来在segmentfault上也看到人提及,觉得挺有趣,记录一下。
为什么’10’ < ‘2’?
可以在控制台里输入试一下,确实’10’ < ‘2’返回值是true
多试几次其他情况后就能发现初步规律。
'10' < '2'
'1' < '2'
'3' > '2'
'19999' < '2'
'30' > '200'
很明显,数字字符串的比较是按照字符对应位置一个个比较,由于’10’的第一位是1,比‘2’的第一位2小,所以’10’ < ‘2’。
但在对应位置比较时,其实并不是按照数字大小比较的。
意思是,‘1’ < ‘2’ 并不是因为1 < 2。
对应位置比较实际是比较它们的字符编码的大小,你可以通过charCodeAt(0)查看一个字符的编码
'1'.charCodeAt(0) // 49
'2'.charCodeAt(0) // 50
因为49 < 50, 所以‘1‘ < ‘2’
而刚好0-9在字符集中是按照顺序排下来的,所以从表面上来看,就是数字本身的大小关系了。