Javascript 语言环境字符串与 String.prototype.valueOf 的比较

Javascript locale string comparison with String.prototype.valueOf

我有以下例子:

class MyClass {
  constructor(name) {
    this.name = name;
  }

  toString() {
    return this.name;
  }

  valueOf() {
    return this.name;
  }
}

const list = [new MyClass("b"), new MyClass("ä")];

list.sort();
console.log(list.join());

list.sort(new Intl.Collator('de').compare);
console.log(list.join());

在这里,需要 Collator 才能获得正确的排序顺序,但我想摆脱它,我希望能够将 MyClass 的实例与简单的 myClass1 < myClass2。这在理论上应该可以通过更改 valueOf 函数来实现。

我现在的问题是,是否有任何 JavaScript 内置方法可以获取字符串的“区域设置”值(类似于 Intl.CollatorlocaleCompare) return 在我的 valueOf 函数中得到正确的顺序?

不,没有这样的信息。基本上,除非您直接(如 Intl.Collator)或间接(如 localeCompare)将 Intl 与指定的区域设置一起使用,否则您将根据字符串的浏览器实现比较代码点,这很可能是通过 UTF- 16 个代码点。