2015-06-02 2 views
8

Я понимаю, что использование этой функции сделает всю строку строчной. Тем не менее, мне любопытно работать за кулисами. Я не могу найти объяснения в любом месте о том, как это работает. Происходит ли это в основном по каждому индексу в строке и проверяет, есть ли этот символ и доступен ли более низкий регистр?Как работает toLowerCase() в Javascript?

+0

Ответ на это будет специфичным для реализации; некоторые могут просто позвонить в библиотеку, чтобы сделать для нее преобразование. –

+0

[Эта страница из MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase) также может помочь. –

ответ

6

В общем лучшем месте, чтобы искать такую ​​информацию является ECMAScript specification: принимается

следующих шагов:

  1. Вызов CheckObjectCoercible передавая это значение в качестве аргумента.
  2. Пусть S является результатом вызова ToString, давая ему это значение в качестве аргумента.
  3. Пусть L - строка, в которой каждый символ L является либо младшим символом Юникода соответствующего символа S, либо фактическим соответствующим символом S, если не существует эквивалент нижнего регистра Unicode.
  4. Возвращение Л.

Для целей этой операции 16-битовые кодовые блоки из строк, рассматриваются в качестве точек коды в Unicode, Basic Multilingual Plane. Суррогатные кодовые точки напрямую передаются из S в L без какого-либо сопоставления.

Результат должен быть получен согласно сопоставлениям case в базе данных символов Юникода (это явно включает в себя не только файл UnicodeData.txt, но также файл SpecialCasings.txt, который сопровождает его в Unicode 2.1.8 и новее).

Шаг 3 - это то, что вас действительно интересует. Как вы можете видеть, детали того, как производится «L», соответствуют реализации. Если вы заинтересованы в том, чтобы идти глубже, следующее место для поиска будет, например, V8 engine.

+0

3. На самом деле это не похоже на конкретную реализацию - она ​​ссылается на определенную спецификацию Unicode. Ну, кроме того, что есть несколько версий Unicode, конечно ... – Luaan

+0

@Luaan - Он не указывает, как вы получаете от 'S' до' L'. В нем указано, что должно быть «L», а не как туда добраться. –

+0

Я не думаю, что вы читаете это право - он явно говорит, что вы сопоставляете каждый из символов в S с эквивалентным строчным символом в соответствии с правилами юникода (сопоставления обсадных) на L. Насколько проще, чем S [i] - > L [i] вы можете получить? – Luaan

Смежные вопросы