3 ms·
I highly doubt js engines would compile a string down to a linked list. But you're right they might compile it to a circular buffer or deque which can have O(1)
by ghj 6y ago
I highly doubt js engines would compile a string down to a linked list. But you're right they might compile it to a circular buffer or deque which can have O(1) prepends.
Quick googling shows that this optimization might exist but only for firefox and only if you use "unshift":
https://lannonbr.com/blog/2020-01-27-shift-optimizations https://lannonbr.com/blog/2020-01-27-shift-optimizations
https://jandemooij.nl/blog/2017/12/06/some-spidermonkey-optimizations-in-firefox-quantum/ https://jandemooij.nl/blog/2017/12/06/some-spidermonkey-opti...
But it's very unlikely that the jit can optimize `str = ch + str;`
- cogman10 6y agoDepends on the form that `str = ch + str` takes inside the loop. But yeah, the way they wrote the code makes it less likely to work well. let padding = ''; for (let i = 0; i < len; ++i) padding += ch; return padding + str; The above would probably get caught by the JIT and would essentially be optimized to what `ch.repeat(len) + str;` would do.