Задать вопрос
Ответы пользователя по тегу JavaScript
  • Какой набор библиотек используют в веб-геймдве?

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

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

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

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

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

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

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

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

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

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

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

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

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

    Ошибка у тебя в том, что 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 какой код производительнее?

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

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

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

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

    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 {
      // ...
    }
    Ответ написан
    Комментировать
  • Интеграция C++ в Electron'е?

    C++ умеет компилироваться в wasm, а wasm умеет работать с канвасом через webgl.

    Но, ИМХО, если идти в эту сторону, то использование какого-нибудь tauri+Rust выглядит разумнее, чем Electron + C++
    Ответ написан
    1 комментарий
  • Как ускорить fetch в цикле?

    мне нужно достать первую которая ответила статусом 200

    Например, ты можешь вместо Promise.all использовать Promise.any
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Или Promise.race
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ответ написан
    1 комментарий
  • Как перенести переменную js из окна на другую страницу?

    vabka
    @vabka Куратор тега Веб-разработка
    А для чего именно нужно передать?
    Есть разные способы и не все вам могут подойти.
    Самый простой и без привлечения сервера - через local storage
    Ответ написан
    2 комментария
  • Как подключить пакеты в Node.js?

    Копия моего комментария, с попыткой воспроизвести

    Вот с таким package.json
    {
      "name": "node_test",
      "version": "1.0.0",
      "main": "index.js",
      "dependencies": {
        "spotify-web-api-js": "^1.5.2"
      },
      "type": "module"
    }

    и вот таким index.js:
    import SpotifyWebApi from "spotify-web-api-js";
    // const SpotifyWebApi = require("spotify-web-api-js");
    const spotify = new SpotifyWebApi();
    spotify.getGeneric("???", () => console.log("callback"));

    Всё работает.
    Если убрать type: module, то тогда вместо import можно (и нужно) будет использовать require.

    Ну кроме того что библиотека эта предназначена для браузера, а не для ноды, а по тому она сразу падает из-за того что не может найти XMLHttpRequest.

    Мне кажется, вы просто забыли вызвать npm install, чтобы скачать зависимости.

    PS: в ноде эту библиотеку использовать нельзя.
    Для ноды следует брать эту:https://www.npmjs.com/package/spotify-web-api-node
    Ответ написан
  • Какой язык полезно будет выучить для расширения кругозора?

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

    Хочется чего-то нового - какой-нибудь функциональный язык типа Haskell, F#, ReasonML (если понравится, то тоже можно взять в свой инструментарий, тк для F# есть Fable, а Haskell на фронте существует в виде ReasonML)

    Хочется чего-то совсем новых ощущений - Rust (можно тоже взять в свой инструментарий, тк на нём неплохо можно модули на wasm писать)
    Ответ написан
    Комментировать
  • Как создать анимацию как здесь https://promexcut.ru/?

    vabka
    @vabka Куратор тега Веб-разработка
    Конкретно тут это реализовано через плоские 2d-картинки, к которым применяется transform.
    Хотя может быть и правда какой-нибудь сторонний софт умеет в такой вид экспортироваться.
    Вот например картинка с машиной:
    car4.png
    Сами изображения были изначально смоделированы в 3d и отрендерены в картинки с тенями и прозрачным фоном.
    Ответ написан
    Комментировать
  • Для чего нужны Map и Set?

    Окей гугл, что такое "структуры данных".

    Нужны они для не очень частых случаев, когда объект (по сути тот же Map со строковым ключом) или массив не удобны, либо слишком неэффективны (тут следует загуглить О-большое).

    Например при помощи Map ты можешь сопоставить одному объекту другой объект, чего ты никак не можешь сделать при помощи обычных объектов.

    А при помощи Set ты можешь получить массив без повторов, и при этом без необходимости при каждой вставке проверять, есть ли такой элемент в массиве, или нет.
    Ответ написан
    Комментировать
  • Как определить что запрос к api пришел с клиента?

    Никак.
    Ответ написан
    Комментировать
  • Что за код на 10000 строк?

    Это минифицированный код.
    Спрашивай у автора, где исходники
    Ответ написан
    Комментировать
  • Почему Rust нужна хэш-функция для реализации объектов, а JS такое не использует?

    vabka
    @vabka Куратор тега Rust
    Вообще объекты в JS - это тоже hashmap, и в этой структуре есть защита от коллизий:
    Если вдруг два разных ключа получили один и тот же хеш, то они складываются в одну корзину, и при попытке получить значение по ключу - придётся ещё пройтись по всем парам ключ-значение в этой корзине, чтобы найти нужный ключ, уже используя Eq.
    Ответ написан
    Комментировать