Взято з MDN
Лінійні рядки (позначені подвійними або одинарними лапками) та рядки, повернуті з викликів String у неконструкторському контексті (тобто, без використання нового ключового слова), є примітивними рядками. 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"