JavaScript中文字符进行大小的比较

作者 happyWang 日期 2013-03-17 Views
JavaScript中文字符进行大小的比较

最近在看《JavaScript权威指南(第六版)》,里面有个例子,是说的

“a” < “b” // => true

然后我就想了,那中文字符可以进行这样的比较吗,然后就在Chrome的控制台里面测试了一下

“大” < “小” // => true
“小” < “大” // => false

那它们是如何比较的? 书里面有这样一句话:

Unicode允许使用多种方法对同一个字符进行编码。比如,字符“é”可以使用Unicode字符u00E9表示,也可以使用普通的ASCII字符e跟随一个语调符u0301。在文本编辑器中,这两种编码的显示结果一模一样,但它们的二进制编码表示是不一样的,在计算机里也不相等。Unicode标准为所有字符定义了一个首选的编码格式,并给出了一个标准化的处理方式将文本转换为一种适合比较的标准格式,JavaScript会认为它正在解析的程序代码已经是这种标准格式,不会再对其标识符、字符串或正则表达式作标准化处理。

对这句话不是很理解,看的很晕。是说的在JavaScript解析之前,已经有程序把它的所有代码转变成了另一种格式的编码吗,而且还不是二进制的

后来偶然看到有encodeURICompent()这样个函数,一般是用来处理URI里面的数据,把一些特殊字符和中文等等进行十六进制编码,以便在不同平台上面数据都能很好使用

然后我就试了下

encodeURIComponent(“大”); // =>%E5%A4%A7
encodeURIComponent(“小”); // =>%E5%B0%8F

很明显,转化成十六进制之后,”小”的值是大于”大”的

我想,是不是在JavaScript解析之前,浏览器就根据Unicode标准用类似的方式把代码进行了编码,所以等到JavaScript解析的时候,比较”大”>”小”,实际上是类似于在比较”%E5%A4%A7”>”%E5%B0%8F”

不知道有人能跟我讲解一下这方面的知识不,感激不尽