indexOf
не работает в постоянное время. Ожидается, что он работает намного быстрее, чем реализация полифилла в JavaScript. Это связано с тем, что функции, являющиеся частью языка JavaScript (EcmaScript), обычно написаны на языке более низкого уровня, например C или C ++.
Вот тест, который иллюстрирует, что indexOf
делает не работает в постоянное время:
// create a very long string aaaa...ab...bc...cd (etc)
let alpha = "abcdefghijklmnopqrstuvwxyz";
let s = Array.from(alpha, c => c.repeat(10000000)).join("");
// find each of the letters in this long string
for (let c of alpha) {
let start = performance.now();
s.indexOf(c);
let end = performance.now();
console.log(end-start);
}
См. На каком языке написано JavaScript? для каких языков используются для реализации JavaScript, включая такие функции, как indexOf
.