Entnommen aus MDN
Zeichenfolgenliterale (gekennzeichnet durch doppelte oder einfache Anführungszeichen) und Zeichenfolgen, die von Zeichenfolgenaufrufen in einem Nichtkonstruktorkontext (dh ohne Verwendung des neuen Schlüsselworts) zurückgegeben werden, sind primitive Zeichenfolgen. JavaScript konvertiert Primitive automatisch in String-Objekte, sodass String-Objektmethoden für primitive Strings verwendet werden können. In Kontexten, in denen eine Methode für eine primitive Zeichenfolge aufgerufen werden soll oder eine Eigenschaftssuche erfolgt, wird das Zeichenfolgenprimitiv von JavaScript automatisch umbrochen und die Methode aufgerufen oder die Eigenschaftssuche durchgeführt.
Daher dachte ich, dass (logisch) Operationen (Methodenaufrufe) für Zeichenfolgenprimitive langsamer sein sollten als Operationen für Zeichenfolgenobjekte, da jedes Zeichenfolgenprimitiv in Zeichenfolgenobjekt konvertiert wird (zusätzliche Arbeit), bevor method
es auf die Zeichenfolge angewendet wird.
In diesem Testfall ist das Ergebnis jedoch umgekehrt. Der Codeblock 1 läuft schneller als der Codeblock 2 , beide Codeblöcke sind unten angegeben:
Codeblock-1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Codeblock 2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Die Ergebnisse variieren in Browsern, aber der Codeblock 1 ist immer schneller. Kann jemand bitte erklären, warum der Codeblock-1 schneller ist als der Codeblock-2 .
'0123456789'.charAt(i)
?
code block-1
ist schneller?
new String
führt eine weitere transparente Schicht aus Objektverpackung.typeof new String(); //"object"