Ответы пользователя по тегу JavaScript
  • Как обновить все зависимости и зависимости зависимостей npm/yarn?

    vabka
    @vabka
    Токсичный шарпист
    Удаляешь package lock, удаляешь node_modules, вызываешь npm i - вот тебе и будет обновление.
    Будут установлены максимальные совместимые версии
    Ответ написан
    Комментировать
  • Почему тест Jest выдает ошибку(Uncaught ReferenceError: module is not defined)?

    vabka
    @vabka
    Токсичный шарпист
    Потому что getAge почему-то оказался не функцией. Видимо импортируешь как-то не так.
    Ответ написан
    2 комментария
  • Какую альтернативу взять место MongoDB?

    vabka
    @vabka
    Токсичный шарпист

    а её заблокировали в России

    Только облачный Mongodb Atlas.

    А развернуть свой экземпляр можно без каких-либо проблем.
    Если хочется облако - можно взять dbaas у какого-нибудь провайдера.

    MySQL радикально отличается от mongodb как языком запросов, так и парадигмой.
    GraphQL - вообще даже не база данных, а только лишь протокол
    Ответ написан
    Комментировать
  • Что дальше учить?

    vabka
    @vabka
    Токсичный шарпист
    Коротко - да, надо всё. Не надо только если тебе фронтенд не интересен - тогда и React можно не учить.
    Раз ты не можешь сам оценить нужность этих тем для тебя - значит уровень знаний у тебя сейчас околонулевой.

    Длинно - пройдись по каждой теме по порядку:
    - Если можешь ответить конкретно на вопрос "что я получу, если изучу эту тему", то решай сам.

    - Если не смог ответить на этот вопрос, то пройдись хотябы поверхностно. Если будет выглядеть как что-то полезное или хотябы интересное - изучи более глубоко.

    Зря боишься потратить время зря - оно будет потрачено зря только если ты совсем решишь отказаться от фронтенда и уйти в радикально другую сферу.


    для чего они нужны?

    Ты ожидаешь, что тебе сейчас все 20 пунктов распишут?
    Не ленись - прочитай предисловие к каждому сам.
    Ответ написан
    3 комментария
  • Важно ли глубокое знание и владение фронтенд девелоперу canvas, 2d и webgl графики?

    vabka
    @vabka
    Токсичный шарпист
    Мне кажется, что скорее нет, чем да. Но знать о их существовании и о принципах работы с ними - очень следует
    Ответ написан
    Комментировать
  • Как работает debounce?

    vabka
    @vabka
    Токсичный шарпист
    Ты не правильно используешь. https://docs-lodash.com/v4/debounce/
    Ответ написан
    Комментировать
  • Как работает оператор &?

    vabka
    @vabka
    Токсичный шарпист
    То что вы написали в вопросе и в комментарии к моему встречному вопросу - это две совершенно разные вещи.

    То что в вопросе:
    const myVar = ClassCat & ClassDog;
    Тут работа идёт со значениями и & - это побитовое И.

    А вот кусок кода из вашего пояснения:
    export type CatDocument = Cat & Document;
    1. Это Typescript. В JS нет никакого Export type
    2. Тут работа идёт уже с типами (Не со значениями!). & - это пересечение типов
    CatDocument - это пересечение типов Cat и Document.

    На практике это значит, что переменная, которая имеет тип CatDocument должна иметь все поля из Cat и из Document, если Cat и Document - это объекты.
    Ответ написан
    Комментировать
  • Почему это не функция?

    vabka
    @vabka
    Токсичный шарпист
    Попробую сыграть в угадайку.
    1. Имеется в виду не "не функция", а "не чистая функция".
    2. toSlug1 использует throw чтобы сообщить об ошибке, что сложно отразить в контракте и оно добавляет нелинейность в код.

    Но тогда остаётся вопрос, почему toSlug2 назван чистой функцией, если catch у промиса такой же не обязательный.

    PS: посмотрел расшифровку речи спикера - он как раз об этом и говорит.
    toSlug1 не функция из-за того что у неё throw есть, а toSlug2 полностью линейный и детерминистический, без побочных эффектов.
    Ответ написан
    1 комментарий
  • Почему возвращается true а не 5?

    vabka
    @vabka
    Токсичный шарпист
    Потому что || - это ленивая операция и приоритет у неё ниже, чем у &&.
    => Сначала будет вычислено выражение 5 === 5 && 3 > 1, которое имеет значение true
    А раз оно true, то и правую часть 5 вычислять не нужно.
    Ответ написан
    Комментировать
  • Как установить яндекс капчу "я не робот"?

    vabka
    @vabka
    Токсичный шарпист
    1. # - это получение по id, а тебе нужно по name.
    2. у тебя name=smart-token, а не smart_token
    Используй $("input[name='smart-token']")
    Ответ написан
    1 комментарий
  • Допустимо ли сокращать названия переменных до 1 буквы или комбинации символа + буквы?

    vabka
    @vabka
    Токсичный шарпист
    Моё мнение - если тебе смысл переменной не очевиден, то нужно делать полноценное имя переменной.

    Короткое, например, имеет смысл для параметра в лямбде (array.filter(x => x % 2 === 0)) или в какой-нибудь функции наподобие
    function sum(a, b) {
     return a+b;
    }


    Если тебе к твоей однобуквенной переменной нужно ещё и комментарий писать, который её расшифрует - значит переменная точно не должна быть однобуквенной.

    В том примере кода, который у тебя есть в вопросе, ничего нельзя сократить.

    Экономить ресурс нажатий на кнопки клавиатуры не надо, как и не надо экономить буквы на экране.
    Ответ написан
    Комментировать
  • Объясните значения цитаты из документации Typescript?

    vabka
    @vabka
    Токсичный шарпист
    1. Сделать явную проверку на undefined
    2. Избавиться от опционального параметра совсем
    3. Сделать параметр не опциональным
    Ответ написан
    Комментировать
  • Какой набор библиотек используют в веб-геймдве?

    vabka
    @vabka
    Токсичный шарпист
    Не существует какого-то одного набора библиотек - всё подбирается исходя из задачи. Некоторые библиотеки, которые могут использоваться ты уже назвал. Некоторые другие - ты можешь узнать из описания вакансий.

    А почему обязательно JavaScript? Браузерные игры вполне могут делаться и на юнити.

    Что-то может и под Wasm делаться, а там уже и C++ и Rust живут со своими экосистемами.

    А некоторые браузерки и не требуют 3d вообще - там может использоваться и какой-нибудь кастомный 2д движок, а часть логики может обрабатываться на сервере, который вообще написано на php.
    Ответ написан
    Комментировать
  • Как облагородить/сократить данный свитч?

    vabka
    @vabka
    Токсичный шарпист
    Убрать switch вообще и использовать вместо него if.
    Осмысленные действия распихать по функциям.

    Вместо этого эзотерического
    let arrInput = [!mailArr.length, !inputEmptyArr.length]
    arrInput.every((x) => x === true)

    Писать что-то типа
    if(mailArr.length === 0 && emptyInputArr.length === 0)

    Да, менее компактно, но более читабельно.
    Ответ написан
    Комментировать
  • Как защитить свой javascript?

    vabka
    @vabka
    Токсичный шарпист
    , чтобы клиент не мог подставить свои значения только вот как это сделать не нашёл =( )

    Нет никакого секретного ингредиента (с)

    А на том сайте, вероятно, код просто игнорирует что там в тегах написано и ориентируется на внутреннее состояние.
    Нельзя доверять данным, которые приходят с клиента - вот и вся защита. Точка.
    Ответ написан
    Комментировать
  • Как работает этот код? Почему у функции появляется метод?

    vabka
    @vabka
    Токсичный шарпист
    В JS функции - это тоже объекты.
    У объектов вполне могут быть какие-то поля, которые тоже могут быть функциями.
    Ответ написан
    Комментировать
  • Почему складывается не строки, а числа?

    vabka
    @vabka
    Токсичный шарпист
    Код у тебя, конечно, ужас.
    Вместо того чтобы складывать/умножать на innerHTML тебе нужно преобразовывать его в число.
    Например при помощи функции parseInt
    Ответ написан
    Комментировать
  • Почему Ajax запрос не возвращает данные?

    vabka
    @vabka
    Токсичный шарпист
    Ошибка у тебя в том, что Ajax-запрос выполняется асинхронно.
    Тоесть функция getName вернёт управление в вызывающую функцию ещё до того, как даже будет вызван твой onload.
    + по хорошему onload нужно устанавливать ещё до отправки.
    Это раз.

    А два - return твой возвращает управление в момент вызова onload, а по тому просто некому будет на той стороне прочитать полученные данные.

    Решения два:
    1. Использовать промисы. Например так:
    function getName(user_id) {
        return new Promise(function(resolve) {
            // data
            var data = {}
            data.user_id = user_id
            data = JSON.stringify(data)
    
            // send
            const request = new XMLHttpRequest();
            request.open("POST", "/test-ajax/");
            request.send(data);
            request.onload = function() {
                var name = JSON.parse(this.response)
                resolve(name);
            }
        });
    }
    
    // Дальше работаем через then
    getName(user_id).then(data=>console.log(data));
    
    // Или async/await
    const name = await getName(user_id);

    В этом примере мы сразу возвращаем объект-промис, который будет завершён внутри onload. А дальше можно с ним работать через async-await или then с коллбэком.

    2. Использовать коллбэки (по старинке):
    function getName(user_id, callback) {
    
        // data
        var data = {}
        data.user_id = user_id
        data = JSON.stringify(data)
    
        // send
        const request = new XMLHttpRequest();
        request.open("POST", "/test-ajax/");
        request.send(data);
    
        // get
        request.onload = function() {
            var name = JSON.parse(this.response)
            callback(name)
        }
    }
    
    var onNameLoaded = function(name) {
        console.log(name)
    };
    getName(user_id, onNameLoaded);

    В этом примере мы передаём в функцию getName другую функцию, которая должна быть вызвана после загрузки данных.

    3. Использовать fetch и async/await - мы же в 2022 году живём. (@Mi11er)
    async function getName(userId) {
        const response = await fetch("/test-ajax/", {
            method: "POST",
            body: JSON.stringify({"user_id": userId})
        })
        return await response.json();
    }
    
    const name = await getName(userId);
    Ответ написан
    8 комментариев
  • Js какой код производительнее?

    vabka
    @vabka
    Токсичный шарпист
    1й вариант - очень многословный. Не говоря даже о том, что в коде ошибка (не хватает })
    2й вариант - навешиваем хендлер на все элементы, а фильтруемся уже внутри хендлера
    3й вариант - как 1й, но более читабельный.

    Кажется, что 2й вариант будет менее производительным, если у тебя очень много элементов, тк каждый раз будет происходить проверка, а не содержит ли список классов, нужный класс.
    Но нужно профайлить, чтобы ответить более аргументированно.

    Аналогично при сравнении 1 и 3.

    Я бы не стал задумываться о том, какой из них действительно более производительный, пока не столкнулся бы с проблемой, а она врядли произойдёт.
    Используйте то, что удобнее и читабельнее в конкретной ситуации.
    Ответ написан
    Комментировать
  • Как работает свитч-кейс?

    vabka
    @vabka
    Токсичный шарпист
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    switch-case в js не умеет сопоставлять одновременно несколько значений.
    Так что никак твой код рабочим не сделать.
    Тем более, что не понятно, что он должен делать.

    В общем случае switch разворачивается примерно вот так:

    switch (expression) { // expression - это какое-то выражение. Тоесть значение одно.
      case variant1: // variant1 и variant2 - это тоже какое-то выражение. Тоесть тоже ровно одно значение.
        // ...
      break;
      case variant2:
        // ...
      break;
      default:
        // ...
      break;
    }
    
    // Вот в такое
    const value = expression;
    if(value === variant1) {
      //...
    } else if (value === variant2) {
      //...
    } else {
      // ...
    }
    Ответ написан
    Комментировать