Tratto da MDN
I letterali stringa (indicati da virgolette doppie o singole) e le stringhe restituite da chiamate String in un contesto non di costruzione (cioè, senza utilizzare la nuova parola chiave) sono stringhe primitive. JavaScript converte automaticamente le primitive in oggetti String, in modo che sia possibile utilizzare i metodi degli oggetti String per le stringhe primitive. Nei contesti in cui un metodo deve essere invocato su una stringa primitiva o si verifica una ricerca di proprietà, JavaScript avvolgerà automaticamente la primitiva di stringa e chiamerà il metodo o eseguirà la ricerca di proprietà.
Quindi, ho pensato (logicamente) le operazioni (chiamate di metodo) sulle primitive di stringa dovrebbero essere più lente delle operazioni su oggetti stringa perché qualsiasi primitiva stringa viene convertita in oggetto stringa (lavoro extra) prima di method
essere applicata sulla stringa.
Ma in questo caso di test , il risultato è opposto. Il blocco di codice 1 viene eseguito più velocemente del blocco di codice 2 , entrambi i blocchi di codice sono riportati di seguito:
blocco di codice-1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
blocco di codice 2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
I risultati variano nei browser, ma il blocco di codice 1 è sempre più veloce. Qualcuno può spiegare questo, perché il blocco di codice 1 è più veloce del blocco di codice 2 .
'0123456789'.charAt(i)
?
code block-1
è più veloce?
new String
introduce un altro strato trasparente di avvolgimento dell'oggetto .typeof new String(); //"object"