Una forma típica de convertir a mayúsculas es usar una operación bit a bit para borrar el bit de mayúsculas a 0. Aquí está mi línea para convertir un carácter a mayúsculas.
chr = ‘a’;
String.fromCharCode (chr.charCodeAt (0) & 223); // => ‘A’
En ASCII, el sexto bit indica si es mayúscula o minúscula. Por lo tanto, si usamos una operación bit a bit para establecer el sexto bit en 0, se convertirá a mayúsculas.
Aquí está la función toUpperCase que desea:
- Creo que la mayoría de los médicos y ejecutivos de atención médica no participan en las redes sociales. ¿Ves lo mismo y cómo podemos cambiar esto?
- Mi estado de ánimo está cambiando como loco con este medicamento para la tiroides durante la primera semana. ¿Esto es normal?
- Si tengo un año repetido en la universidad, entonces, ¿cómo debo pasar mi año?
- Tengo un montón de tiempo libre, ¿qué debo hacer con él?
- Necesito hacer estallar un auto para un cortometraje, ¿a quién necesito permiso?
var myToUpperCase = función (str) {
var ret = “”;
para (i = 0; i <longitud de str; i ++) {
ret + = String.fromCharCode (str.charCodeAt (i) & 223);
}
volver ret;
}
Ahora echemos un vistazo a esta solución.
¿Por qué y 223?
Para entender esta frase, primero debe saber cómo se codifican los caracteres. Aquí hay algunos caracteres en decimal ASCII:
‘a’: 97 – ‘A’: 65;
‘b’: 98 – ‘B’: 66;
‘c’: 99 – ‘C’: 67;
…
Ves el patrón aquí. En ASCII, la mayúscula es simplemente 32 DEC (o 20 HEX) menos que su minúscula. Por lo tanto, para convertir un carácter a mayúsculas, ¿no podemos simplemente convertirlo a su código ASCII, restar 32 y volver a convertirlo en un carácter?
Sí tu puedes. Intentemos esto:
String.fromCharCode (chr.charCodeAt (0) – 32);
Como puede ver, ‘- 32’ también funcionará en este carácter simple. Sin embargo, si tiene una cadena más compleja con letras mezcladas con números y símbolos, ¿seguirá funcionando?
Probemos con la cadena “Chen_Yumin”, con ‘- 32’ para cada carácter, el resultado es “‘ #HEN? 9UMIN’ “. Entonces, ¿qué salió mal?
El problema con ‘- 32’ es: no funciona con letras mayúsculas, números y símbolos. El carácter ‘C’, por ejemplo, ya está en mayúscula (67 DEC), si resta 32, se convertirá en ‘#’ (35 DEC).
Para que funcione con letras mayúsculas, números y símbolos. Tienes que echar un vistazo a la representación binaria.
‘a’: 1 1 00001 – ‘A’: 1 0 00001;
‘b’: 1 1 00010 – ‘B’: 1 0 00010;
‘c’: 1 1 00011 – ‘C’: 1 0 00011;
¿Ves el patrón aquí? La única diferencia aquí es el sexto bit. Este bit define si una letra es mayúscula o no. Por lo tanto, podemos simplemente establecer el sexto bit en 0.
Para hacer esto, necesitaríamos usar operaciones de bit. Si realizamos la operación AND en la letra minúscula con 11011111, esto establecerá el 6to bit en 0 mientras retendremos el resto de los bits.
Por lo tanto, la solución se convierte en ‘& b11011111’. JavaScript no admite binario directo como entrada de valor, por lo que primero tendríamos que convertir ‘b11011111’ a decimal, que se convierte en nuestra respuesta ‘& 223’.
Si desea obtener más información sobre esto, he escrito una publicación de blog sobre esto: Cómo usar operaciones bit a bit en JavaScript para convertir una cadena a mayúsculas.