Память расходуется в операторе array.push(item + step);
- это потому, что Вы так написали. Я не знаю, как это ещё объяснить. И не знаю, зачем Вы это делаете.
Вам верно указали, что условие завершения цикла while (+array[array.length - 1] !== 100);
может не выполниться, причём в любом языке на любой платформе (а где-то - может выполняться). В данном случае (JS) оно не выполняется (на любой аппаратуре, у JS это стандарт на работу с float-числами).
Я советую заменить условие "не равно" на "строго меньше" - мне кажется, получится то что надо.
Либо можно запустить цикл по счётчику, вычислив заранее число повторений.
И ещё совет: Если цикл ведёт себя неправильно, то вставьте внутрь отладочную печать изменяемых в нём переменных - например, array.length и item