- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
function paramEncode(str){
var text = escape(str);
while(text.indexOf("%u") !=-1)
text = text.replace("%u","!u");
while(text.indexOf("%") !=-1)
text = text.replace("%","!u00");
while(text.indexOf(".") !=-1)
text = text.replace(".","!u002E");
while(text.indexOf("/") !=-1)
text = text.replace("/","!u002F");
return text;
}
не был уверен, сколькикратное замещение делает. А потом почитал таки справочник ))
Поэтому или регекспом, или while
text.replace(a/g,'A'));
и
while(text.indexOf('a')!=-1) text.replace('a','A');
да пока руки не доходят
это дело 5-10 мин )
Сам обычно реплейсаю через регекспы:)
text = text.replace('a','A')
на последнем файрфоксе под хрюшей дал
for(var i=0;i<cnt;i++) {
text = text.replace(/a/g,'A');
}
Хотя и без присваивания разница заметна невооруженным глазом
мы заменяем одной инструкцией, но текст остается исходным для второго теста
во втором же присвоение нужно, потому что в цикле
Поэтому чтобы увидеть результат, то надо переприсвоить.
при
var text='aaaaaaaa';
text.replace(/a/g,'A') ;
text будет равен 'aaaaaaaa'
text будет равен 'АААААААА', а потом тогда второй тест сфейлит, ему нечего будет заменять. Либо перед вторым тестом тоже написать var text='aaaaaaaa';
"текст остается исходным для второго теста"
Тогда во втором тесте замена внутри while у тебя отработает только 1 раз.
Значит, подсчитанное время будет неверным.
"Либо перед вторым тестом тоже написать var text='aaaaaaaa';" - внутри цикла по i
Теперь видно, что не так все хорошо с while, как казалось сразу.
Опера пишет, что это немного медленнее, чем регулярка, но в 2 раза быстрее while.
Я так думаю, что на большом тексте разница будет намного заметнее. ГК защитан.