闲谈一隅

JavaScript字符串大小的比较

先举个简单的例子:

1
2
3
4
5
6
'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
额~~,都是英文看的头昏眼花的,也没搞的太明白(学好英语还是很重要的),只能说个大概:

  1. 按字符逐个比较该字符的charCode值,直到分出大小为止
  2. 若该字符串,前面都比较都是相等的,且有一个字符串已经没有下一个字符,那取一个不存在的字符就会是undefined,然后再跟另一个字符比较(undefined好像小于所有其他所有字符,跟null相等,但又不全等)

如果是像这样 'a' > 'aa',先比较第一个字符,结果是相等的,那就再比较第二个字符,但是'a'并没有第二个字符,所以取到的就是 undefined ,然后 undefined 再跟 a 比较是小于 a 的,所以 'a' < 'aa'false

空格的chrCode是32,a的chrCode是97,所以`'aa' > 'a ' //true

console.log(‘选择’>’努力’); // true