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.Collator
或 localeCompare
) return 在我的 valueOf
函数中得到正确的顺序?
不,没有这样的信息。基本上,除非您直接(如 Intl.Collator
)或间接(如 localeCompare
)将 Intl 与指定的区域设置一起使用,否则您将根据字符串的浏览器实现比较代码点,这很可能是通过 UTF- 16 个代码点。
我有以下例子:
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.Collator
或 localeCompare
) return 在我的 valueOf
函数中得到正确的顺序?
不,没有这样的信息。基本上,除非您直接(如 Intl.Collator
)或间接(如 localeCompare
)将 Intl 与指定的区域设置一起使用,否则您将根据字符串的浏览器实现比较代码点,这很可能是通过 UTF- 16 个代码点。