Chrome与Firefox中的ToLowerCase

cgo*_*gon 11 javascript

以下在Fi​​refox中给出0.但是它在chrome中给出了-1.

var index = "?STANBUL".toLowerCase().indexOf("is");
console.log(index);
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/81f0yr8w/1/

较低的外壳时,Chrome会增加一个额外的字符(拉丁语大写字母i,上面有一个点"\ u0130")

"?".toLocaleLowerCase().length
>2
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?

Sha*_*mal 3

您可以先对字符串进行编码,然后进行比较。这将在 Firefox 和 Chrome 中产生相同的结果。

\n\n
// 0 Chrome // 0 Firefox\nencodeURIComponent("\xc4\xb0STANBUL".toLowerCase()).indexOf(encodeURIComponent("\xc4\xb0S".toLowerCase())) \n
Run Code Online (Sandbox Code Playgroud)\n\n

Firefox 和 Chrome 的处理方式不同这一事实很奇怪。但奇怪的是 w3c 规范在这里定义: https: //www.w3.org/TR/charmod-norm/#matchingAlgorithm fwiw,您必须先将字符串小写,然后对其进行编码。除非它们首先大小写相同,否则它们不会匹配。

\n\n

发现Firefox Bug并标记为 [812837] 的重复项。( https://bugzilla.mozilla.org/show_bug.cgi?id=812837 ) 该报告于 2011 年报告,目前仍处于开放状态。所以我想这不是一个优先事项。

\n