Tomado de MDN
Los literales de cadena (indicados por comillas dobles o simples) y las cadenas devueltas de llamadas de cadena en un contexto que no es de constructor (es decir, sin usar la nueva palabra clave) son cadenas primitivas. JavaScript convierte automáticamente primitivas en objetos String, por lo que es posible utilizar métodos de objetos String para cadenas primitivas. En contextos donde se va a invocar un método en una cadena primitiva o se produce una búsqueda de propiedad, JavaScript ajustará automáticamente la cadena primitiva y llamará al método o realizará la búsqueda de propiedad.
Entonces, pensé (lógicamente) que las operaciones (llamadas a métodos) en primitivas de cadena deberían ser más lentas que las operaciones en Objetos de cadena porque cualquier primitiva de cadena se convierte en Objeto de cadena (trabajo adicional) antes del method
se aplique en la cadena.
Pero en este caso de prueba , el resultado es opuesto. El bloque de código 1 se ejecuta más rápido que el bloque de código 2 , ambos bloques de código se dan a continuación:
bloque de código 1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
bloque de código 2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Los resultados varían en los navegadores, pero el bloque de código 1 siempre es más rápido. ¿Alguien puede explicar esto, por qué el bloque de código 1 es más rápido que el bloque de código 2 ?
'0123456789'.charAt(i)
?
code block-1
es más rápido.
new String
introduce otra capa transparente de envoltura de objetos .typeof new String(); //"object"