Взято из 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 .
'0123456789'.charAt(i)
?
code block-1
быстрее?
new String
вводит еще один прозрачный слой обтекания объекта .typeof new String(); //"object"