Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2012, 17:44   #1
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию Что проверяет это условие?

Код:
if (!''.replace(/^/, String)) {

}
это условие используется в JavaScript paker в алгоритме распаковки

Код:
function (p, a, c, k, e, r) {
    e = function (c) {
        return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
    };
    if (!''.replace(/^/, String)) {
        while (c--) r[e(c)] = k[c] || e(c);
        k = [function (e) {
            return r[e]
        }];
        e = function () {
            return '\\w+'
        };
        c = 1
    };
    while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
    return p
}
сам могу предположить лиш то что это проверка браузера на работу со строкой, тесты с IE6, Opera11, FF3.5 показали что
это условие if (!''.replace(/^/, String)) { выполяется всегда. а значит я просто не вижу смыла его использовать. и зачем понадобилось там его ставить - загадка.

Последний раз редактировалось Lesha; 16.01.2012 в 18:00.
Lesha вне форума Ответить с цитированием
Старый 16.01.2012, 18:07   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Вечный тру: ищет в пустой строке полную строку и из совпадений (одна пустая строка) создает объект String из пустой строки, который и сам является пустой строкой. Далее пустая строка переводится в булев тип и берется от нее обратное значение — вечный тру.
аналог:
Код:
if (!0) {}
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 16.01.2012, 18:15   #3
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

типа обфукация? чтобы ввести в заблуждение?
Lesha вне форума Ответить с цитированием
Старый 17.01.2012, 09:01   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Вероятно... никогда не ковырял пакер. Честно говоря, всегда считал, что он ужимает код по-максимальному, без подобной шняги.
п.с. в предыдущем посте я ошибся, в пустой строке регулярка заменяет начало строки и возвращает полученную. Смысла не меняет но все-же... Не силен в регулярках=(
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 17.01.2012, 17:35   #5
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Lesha, если переменная String не определена, то это можно прочитать как:
Код:
// Создать пустую строку и заменить в ней начало строки (т.е. ее всю) на String.
// Если переменная String не определена, то возвращается пустая строка, которая
// логическим отрицанием преобразуется в true
if (!''.replace(/^/, String)) {
	// код
}
По крайне мере я понял так. Смотрел на скорую руку (если можно так выразится)
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 17.01.2012, 19:17   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от nerv Посмотреть сообщение
Lesha, если переменная String не определена, то это можно прочитать как:
Код:
// Создать пустую строку и заменить в ней начало строки (т.е. ее всю) на String.
// Если переменная String не определена, то возвращается пустая строка, которая
// логическим отрицанием преобразуется в true
if (!''.replace(/^/, String)) {
	// код
}
По крайне мере я понял так. Смотрел на скорую руку (если можно так выразится)
String - это функция, которая создает объект типа string
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 17.01.2012, 21:09   #7
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Naive, ага спасибо) Эт я ступил) Судя по всему имелось ввиду что то вроде этого
Код:
alert(String.toString()); // my err
alert(String.prototype.toString() === "");
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
<< >> & ^ | с чем это едят и что это такое? pufystyj Общие вопросы C/C++ 4 30.03.2011 13:59
wordpress условие - если это один из постов принадлежащий какой-то категории Alar WordPress и другие CMS 1 18.02.2011 03:46
Эквалайзер...что это? кто это? Можно ли с ним подружиться? .Phoenix Мультимедиа в Delphi 45 08.04.2010 23:37
Что это такое и как это того... Alex Cones Общие вопросы Delphi 2 11.10.2009 12:04