Взято из MDN
Строковые литералы (обозначаемые двойными или одинарными кавычками) и строки, возвращаемые из вызовов String в контексте не-конструктора (т.е. без использования ключевого слова new), являются примитивными строками. JavaScript автоматически преобразует примитивы в объекты String, чтобы можно было использовать методы объекта String для примитивных строк. В тех случаях, когда метод должен вызываться для примитивной строки или происходит поиск свойства, JavaScript автоматически переносит строковый примитив и вызывает метод или выполняет поиск свойства.
Поэтому я подумал (логически), что операции (вызовы методов) над строковыми примитивами должны выполняться медленнее, чем операции над строковыми объектами, потому что любой строковый примитив преобразуется в строковый объект (дополнительная работа) перед применением method
к строке.
Но в этом тестовом случае результат противоположный. Кодовый блок-1 работает быстрее, чем кодовый блок-2, оба кодовых блока приведены ниже:
код блока-1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
код блока-2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Результаты варьируются в браузерах, но код блока-1 всегда быстрее. Может кто-нибудь объяснить, почему код блока-1 быстрее, чем код блока-2.