Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Проблема с closure-compiler в расширеном режиме (https://javascript.ru/forum/offtopic/34236-problema-s-closure-compiler-v-rasshirenom-rezhime.html)

godofjavascript 25.12.2012 16:45

Проблема с closure-compiler в расширеном режиме
 
вломы его качать так что юзаю эту версию http://closure-compiler.appspot.com/home

суть в том что когда я пихаю это в расширенном режиме то он выдает варнинг


Number of warnings: 1

JSC_DETERMINISTIC_TEST: condition always evaluates to false
left : number
right: (Number|null) at line 21 character 8
return (array.length - 1) === iterationIndex;




что мыл функция ifIterationIsLast всегда возвращает false, но это НЕ ТАК.

Гугл совсем поехал в края далекие?


собственно код который я сжимаю
function test(name, value) {

    var keys = name.split('.');


    keys.forEach(function (key, i) {

        //Последняя ли это итерация, последний ли обрабатывается ключ
        var iterationIsLast = ifIterationIsLast(keys, i);

    });


    /**
     * Проверить последняя ли это итерация прямого обхода массива
     * @param {Array} array массив
     * @param {Number} iterationIndex индекс итерации
     * @returns {boolean}
     */
    function ifIterationIsLast(array, iterationIndex) {
        return (array.length - 1) === iterationIndex;
    }

}

test('System.ff', 31);

godofjavascript 25.12.2012 17:13

кажется разобрался number и Number не одно и то же
ожидается обект класса Number а не приметивное значение, а передаем приметивное значение, а приведения типов не делаем.


просто поменял запись в jsdoc с Number на number


/**
     * Проверить последняя ли это итерация прямого обхода массива
     * @param {Array} array массив
     * @param {number} iterationIndex индекс итерации
     * @returns {boolean}
     */

dmitry111 26.12.2012 01:02

Почему появляются варнинги если функция вызывается без аргумента:
Вот пример:
function a (arg) {
    if (arg) {
    // xxx
    } else {
    // ууу
    }
}
a(xxx);
a();


И чем плох может быть такой код?

godofjavascript 26.12.2012 01:13

там написано что код не делает ни чего) и это подозрительно, может вы забыли что то? строка 2 символ 0

а вообще если используешь продвинутый режим то пиши jsdoc, он без него не работает

dmitry111 26.12.2012 01:58

Цитата:

Сообщение от godofjavascript
там написано что код не делает ни чего)

ну правильно)) там же в функции ничего и нет) Я просто пример привел

ну вот теперь делает:
function a (arg) {
    if (arg) {
        alert("Привет " + arg)
    } else {
        alert("Привет юзер!");
    }
}
a("Вася");
a();


в advanced выдаст:
JSC_WRONG_ARGUMENT_COUNT: Function a: called with 0 argument(s). Function requires at least 1 argument(s) and no more than 1 argument(s). at line 9 character 0
a();
^

я просто хотел узнать, может так писать код нельзя? :)


Цитата:

Сообщение от godofjavascript
а вообще если используешь продвинутый режим то пиши jsdoc, он без него не работает

почему не работает? Я уже в адванс моде 2 скрипта сжал, вроде работают

godofjavascript 26.12.2012 06:49

Цитата:

Сообщение от dmitry111
почему не работает?

не работает, а выдает варнинги)

Цитата:

Сообщение от dmitry111
я просто хотел узнать, может так писать код нельзя?

Цитата:

Сообщение от Дзен-трансгуманист
Можно, если объяснить это GCC.

Я же говорю, используй jsdoc

В данном случае просто возьми имя параметра в квадратные скобочки и это будет означать что он не обязательный)
@param {string} [arg]

если просто
@param {string} arg

то обязательный

по умолчанию все обязательные


http://code.google.com/p/jsdoc-toolkit/w/list
интересно а шторм всю эту байду понимает?)

завтра потестю

monolithed 26.12.2012 12:32

Цитата:

Сообщение от godofjavascript
Гугл совсем поехал в края далекие?

Ты всегда сперва используешь устройство, а только потом читаешь руководство?
https://developers.google.com/closur...n_levels?hl=ru
https://developers.google.com/closur...utorial3?hl=ru
https://developers.google.com/closur...compiler?hl=en
Особое внимаение обрати на инструкцию @expose, когда-нибудь пригодится.

И вообще, пора уже запомнить, что в расширешенный режим GCC не нужно использовать для отдельных файлов, он предназначен только для работы с проектом

godofjavascript 26.12.2012 13:11

Цитата:

Сообщение от monolithed
Ты всегда сперва используешь устройство, а только потом читаешь руководство?

Ну да, читаю только если проблемы возникают, и так и надо делать. Только вот при чем тут руководство? Я забыл что у меня === строгое сравнивание а не обычное == , забыл что Number(11) !== 11

и что number !== Number

К тому же руководство на инглише и провести его нереально, а переводчик переводит криво.

Цитата:

Сообщение от monolithed
И вообще, пора уже запомнить

С чего ты взял что я этого не знаю и ли не помню? С чего ты ВООБЩЕ взял что КТО-ТО этого не знает или не помнит? Это же очевидно по тому что он имена не сохраняет и урезает лишнее.


к тому же С ЧЕГО ТЫ ВЗЯЛ что он для этого нужен?? Вообще то можно составить "словарь" вещей которые он не будет сокращать и тогда можно грамотно сжимать разные библиотеки и делать експорт. короче я вообще не понял к чему все это умничество.


п.с. годная ссылка https://developers.google.com/closur...compiler?hl=en

monolithed 26.12.2012 16:01

Цитата:

Сообщение от godofjavascript
Ну да, читаю только если проблемы возникают, и так и надо делать.

Не всегда

Цитата:

Сообщение от godofjavascript
забыл что Number(11) !== 11

Вернет false

А вот это уже нет:
new Number(11) !== 11


Цитата:

Сообщение от godofjavascript
С чего ты взял что я этого не знаю и ли не помню?

С того, что под advanced mode GCC, код нужно писать зная все особенности GCC в этом режиме.

godofjavascript 26.12.2012 16:10

Цитата:

Сообщение от monolithed
Вернет false

А вот это уже нет:
new Number(11) !== 11

в рот мне ноги... КАК)??


Кстати а у гугля есть CSS сжимальщик?


Часовой пояс GMT +3, время: 11:52.