1

我正在编写一些需要执行字母升序排序(标准.sort())行为的代码,我想知道排序如何处理特殊字符和来自不同字符集的字符。例如:

var aChars = [];

aChars.push("¢");
aChars.push("™");
aChars.push("È");
aChars.push("~");
aChars.push("p");
aChars.push("_");
aChars.push("P");
aChars.push("治");
aChars.push("す");

aChars.sort();

for (var i = 0;i<aChars.length;i++) {
    console.log(aChars[i]);
    //alert(aChars[i]);   
}​

执行此代码时,我总是得到一致的顺序。JavaScript 如何决定顺序?我以为可能是 HTML 实体编号,但我找不到那些日文字符的 HTML 实体编号。

4

1 回答 1

3

如果您不提供自己的比较函数,那么根据ECMAScript 规范,以下是规则:

  1. 如果 x 和 y 都未定义,则返回 +0。
  2. 如果 x 未定义,则返回 1。
  3. 如果 y 未定义,则返回 -1。
  4. 如果在 sort 调用中未提供参数 comparefn,则转到步骤 7。
  5. 使用参数 x 和 y 调用 comparefn。
  6. 返回结果(5)。
  7. 调用 ToString(x)。
  8. 调用 ToString(y)。
  9. 如果 Result(7) < Result(8),则返回 -1。
  10. 如果 Result(7) > Result(8),则返回 1。
  11. 返回+0。

对于您的特定情况,由步骤 7-11 确定。

并且,<and>运算符比较第一个不同字符的 Unicode 编码值。

为了更精细地控制情况,MDN 建议使用您自己的自定义比较函数,String.localeCompare()该函数包含更智能的字符排序逻辑。

于 2012-08-22T22:10:37.570 回答