先举个简单的例子:123456'two' > 'three' //true'a' > 'aa' //false'a' > 'a0' //false'aa' > 'a ' //true'a' == 'a' //true'ab' > 'aa' //true
是不是很奇怪?'a' == 'a'
返回 true
很正常,但为什么 two 会大于 three,ab 大于 aa 呢?
JavaScript比较字符串的原理
想要知道为什么 two
会大于 three
我们就要知道JavaScript是根据说明规则去比较字符串的。
我们可以看下ECMA-262标准中的这一段 Abstract Relational Comparison
额~~,都是英文看的头昏眼花的,也没搞的太明白(学好英语还是很重要的),只能说个大概:
- 按字符逐个比较该字符的
charCode
值,直到分出大小为止 - 若该字符串,前面都比较都是相等的,且有一个字符串已经没有下一个字符,那取一个不存在的字符就会是
undefined
,然后再跟另一个字符比较(undefined
好像小于所有其他所有字符,跟null
相等,但又不全等)
如果是像这样 'a' > 'aa'
,先比较第一个字符,结果是相等的,那就再比较第二个字符,但是'a'
并没有第二个字符,所以取到的就是 undefined
,然后 undefined
再跟 a
比较是小于 a
的,所以 'a' < 'aa'
是 false
空格的chrCode
是32,a的chrCode
是97,所以`'aa' > 'a ' //true