以下在Firefox中给出0。但是它在chrome中给出了-1。
var index = "İSTANBUL".toLowerCase().indexOf("is");
console.log(index);
https://jsfiddle.net/81f0yr8w/1/
当较低的内容(拉丁大写字母i上方带有一个点“\ u0130”)时,Chrome会添加一个额外字符
"İ".toLocaleLowerCase().length
>2
这是正常行为吗?
答案 0 :(得分:3)
您可以先对字符串进行编码然后进行比较。这将在Firefox和Chrome中产生相同的结果。
// 0 Chrome // 0 Firefox
encodeURIComponent("İSTANBUL".toLowerCase()).indexOf(encodeURIComponent("İS".toLowerCase()))
Firefox和Chrome处理它的事实很奇怪。但奇怪的是由w3c规范定义:https://www.w3.org/TR/charmod-norm/#matchingAlgorithm fwiw,你必须首先小写字符串然后编码它。他们不会比赛,除非他们先是同一个案件。
找到Firefox Bug并标记为[812837]的副本。 (https://bugzilla.mozilla.org/show_bug.cgi?id=812837)据报道,它在2011年仍然开放。所以我认为这不是优先事项。