2015-06-02 7 views
8

Capisco che l'utilizzo di quella funzione farà in modo che l'intera stringa sia in minuscolo. Tuttavia, sono curioso nel lavoro dietro le quinte. Non riesco a trovare una spiegazione da nessuna parte su come funziona. Fa in pratica scorrere tutti gli indici nella stringa e controllare per vedere qual è il personaggio e se è disponibile un carattere minuscolo?Come funziona toLowerCase() in Javascript?

+0

La risposta sarà specifica per l'implementazione; alcuni possono semplicemente chiamare ad una biblioteca per fare la conversione per questo. –

+0

[Questa pagina da MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase) potrebbe essere d'aiuto. –

risposta

6

In generale, il posto migliore per cercare di tali informazioni è l'ECMAScript specification: sono presi

le seguenti operazioni:

  1. chiamata CheckObjectCoercible passando il questo valore come argomento.
  2. Sia S il risultato della chiamata a ToString, assegnandogli questo valore come argomento.
  3. Sia L una stringa in cui ogni carattere di L è l'equivalente in lettere minuscole Unicode del carattere corrispondente di S o il carattere corrispondente effettivo di S se non esiste un equivalente minuscolo Unicode.
  4. ritorno L.

Ai fini di questa operazione, le unità di codice a 16 bit delle stringhe sono trattati come punti di codice Unicode nel Basic Multilingual Plane. I punti di codice surrogato vengono trasferiti direttamente da S a L senza alcuna mappatura.

Il risultato deve essere derivato in base ai mapping dei casi nel database dei caratteri Unicode (questo include esplicitamente non solo il file UnicodeData.txt, ma anche il file SpecialCasings.txt che lo accompagna in Unicode 2.1.8 e versioni successive).

Fase 3 è la parte che sei veramente interessato a. Come si può vedere, i dettagli di come "L" è prodotto sono fino alla realizzazione. Se sei interessato ad andare più in profondità, il prossimo posto da cercare sarebbe ad es. lo stesso V8 engine.

+0

3. in realtà non sembra tutto specifico per l'implementazione: fa riferimento alle specifiche Unicode molto precise. Bene, tranne il fatto che ci sono più versioni Unicode, ovviamente ... – Luaan

+0

@Luaan - Non specifica come si ottiene da 'S' a' L'. Specifica cosa 'L' dovrebbe essere ma non come arrivarci. –

+0

Non penso che tu stia leggendo bene - dice esplicitamente di mappare ognuno dei caratteri in S al carattere equivalente in lettere minuscole secondo le regole unicode (mappature di involucro) a L. Quanto più semplice di una S [i] - > L [i] mappa puoi ottenere? – Luaan

Problemi correlati