localeCompare()
函数在 Firefox 扩展主代码和网络 worker (或 Chrome worker )中的行为不同。
例如,在主代码中,我有以下代码:
var array = ["École", "Frère", "frère", "école"];
array.sort(function(a, b) {
return a.localeCompare(b);
});
console.log('Main: ' + array);
表明:
Main: �cole,�cole,Fr�re,fr�re
这是正确的排序(编码不是我的问题)。
在 worker 中,我有这个代码:
var array = ["École", "Frère", "frère", "école"];
array.sort(function(a, b) {
return a.localeCompare(b);
});
self.postMessage(array);
它打印:
Frère,frère,école,�0cole
这是错误的顺序(再一次,编码不是我的问题)。
主代码中的排序是可以的,但 web worker 中的排序不行。
我试图更改
localeCompare()
的选项功能,但它不会改变任何东西。为什么 Web Worker 中的排序不同,以及如何在 Web Worker 中正确排序?
(由于某种原因,我无法将数据发送到主代码,进行排序并将其发送回网络 worker 。我仍然得到错误的顺序(给我
école,�0cole,Frère,frère
)。)谢谢你的帮助。
最佳答案
localeCompare
在 Firefox Web Workers 中仍然存在问题。
弗拉基米尔提到 Bug 616841 ,它确实几乎在所有地方都修复了它......除了网络 worker ,因为国际后端(是?)不是线程安全的,或者其他一些线程安全问题,它们被破坏了。相应的“死胡同”补丁从未被审查或 checkin 。
我现在提交 Bug 903780 , 带有基于您的代码的测试用例,以便 localeCompare
希望将来会得到修复。
关于firefox - Firefox 扩展 Web Worker 中的区域设置字符串比较无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550774/