Retirado do MDN
Literais de string (denotados por aspas duplas ou simples) e strings retornadas de chamadas de String em um contexto não construtor (ou seja, sem usar a nova palavra-chave) são strings primitivas. JavaScript converte automaticamente primitivos em objetos String, de forma que seja possível usar métodos de objeto String para strings primitivas. Em contextos em que um método deve ser invocado em uma string primitiva ou ocorre uma pesquisa de propriedade, o JavaScript encapsula automaticamente a primitiva de string e chama o método ou executa a pesquisa de propriedade.
Portanto, pensei (logicamente) que as operações (chamadas de método) em primitivos de string deveriam ser mais lentas do que as operações em Objetos de string porque qualquer primitivo de string é convertido em Object de string (trabalho extra) antes de method
ser aplicado na string.
Mas, neste caso de teste , o resultado é o oposto. O bloco de código 1 é executado mais rápido do que o bloco de código 2 , ambos os blocos de código são fornecidos abaixo:
bloco de código-1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
bloco de código 2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Os resultados variam em navegadores, mas o bloco de código-1 é sempre mais rápido. Alguém pode explicar por que o bloco de código 1 é mais rápido do que o bloco 2 .
'0123456789'.charAt(i)
?
code block-1
é mais rápido?
new String
introduz outra camada transparente de quebra automática de objeto .typeof new String(); //"object"