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

    vabka
    @vabka
    Токсичный шарпист
    Если Javascript - это одна из реализаций ECMA-262, коих множества (TypeScript, ActionScript и т.д.).

    ECMA-262 - это стандарт для JavaScript и описывает он только JavaScript.
    TypeScript, ActionScript и прочие реализуют свою собственную спецификацию, которая не обазана быть совместимой с ecma-262

    То получается V8 как и JavaScript интерпретаторы?

    JavaScript - это язык, а V8 - это интерпретатор этого языка.
    Ответ написан
    2 комментария
  • Как в файле js использовать код python?

    vabka
    @vabka
    Токсичный шарпист
    Видимо вам нужен https://pyscript.net/
    Ответ написан
    Комментировать
  • Какие есть бинарный сериализаторы для React?

    vabka
    @vabka
    Токсичный шарпист
    cbor? https://www.npmjs.com/package/cbor
    bson? https://www.npmjs.com/package/bson
    protobuf? https://www.npmjs.com/package/protobufjs

    А может всё-таки msgpack? Почему он не подходит?
    Ответ написан
    Комментировать
  • Как выполнить код последовательно?

    vabka
    @vabka
    Токсичный шарпист
    1. Перестань jquery использовать
    2. await

    Ну или продолжай цепочку коллбэков

    function SubmitData (data) {
    	// Проверка включена ли grecaptcha в настройках
    	if ($('#grecaptcha').length > 0) {
            $.getScript('https://www.google.com/recaptcha/api.js?render=SITEKEY', function() {
                grecaptcha.ready(function() {
    		grecaptcha.execute('SITEKEY', {action: '123'}).then(function(token) {
    			console.log('111');
    		}).then(()=> {
    	$.ajax({
            type: "POST",
            url: address,
            data: $(formId).serialize(),
            contentType: "application/x-www-form-urlencoded",
            dataType: "text",
            success: function (data) {
            }
        });
    });
                });
            });
    	}
    	console.log('222');
    }
    Ответ написан
  • Как устроен HTMX под капотом?

    vabka
    @vabka
    Токсичный шарпист
    У нас есть JavaScript на стороне клиента (библиотека)

    Да.

    которая посредством атрибутов общается

    Нет. Атрибуты сообщают библиотеке, что нужно делать: отправить запрос, изменить DOM, вызвать какой-то js итд.

    простеньким веб-сервером

    Не простенький, а самый обычный.

    инжектит HTML в страницу без перезагрузки страницы?

    Не только лишь. Да и инжект - это что-то стороннее, а тут вполне себе предусмотренное поведение.
    Ответ написан
    4 комментария
  • Можно ли как добраться до iframe?

    vabka
    @vabka
    Токсичный шарпист
    Внутрь iframe получить доступ нельзя. Смотри в документацию яндекса, можно ли как-то стилизовать блок
    Ответ написан
    Комментировать
  • Как перевести тип данных с С++ на JS?

    vabka
    @vabka
    Токсичный шарпист
    pair - массив из двух элементов или объект с двумя полями.
    ["a", "b"]
    {"fst": "a", "snd": "b"}

    map<string, vector<float> > Объект или Map у которого в качестве значения - массив, а в качестве ключа-строка.
    {"a": [1.2, 3.5]}

    map<pair<string, string>, float> С этим сложнее, тк что массивы, что объекты в js сравниваются по ссылке => вариант того, как мы представляем pair сам по себе не подойдёт.

    Так что тут лучше будет вместо pair использовать строку, которая создана как конкатенация двух экранированных строк через разделитель.

    const map = {};
    const a = "abc";
    const b = "123";
    const key = `${btoa(a)}$${btoa(b)}`;
    map[key] = 42;
    Ответ написан
  • Для чего в fetch options добавляют credentials: true?

    vabka
    @vabka
    Токсичный шарпист
    credentials нельзя присваивать true (он этого не ожидает).
    https://developer.mozilla.org/en-US/docs/Web/API/F...

    Дайте пример кода, где так делают
    Ответ написан
    7 комментариев
  • Переменные var и let. В чем разница? Почему WebStorm жалуется на var?

    vabka
    @vabka
    Токсичный шарпист
    Любой ответ будет копипастой из MDN.
    Если просто:
    Если переменная должна быть изменяемой, то пиши let. Иначе - const.
    var не используй.

    Если сложно:
    https://habr.com/ru/companies/ruvds/articles/420359/
    Ответ написан
  • Как получить input из iframe?

    vabka
    @vabka
    Токсичный шарпист
    Никак.
    Ответ написан
    Комментировать
  • Как отображать в HTML разметки ответы gRPC стрима в asp net core?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    В реальном времени ты в html так их не вставишь.
    У тебя два варианта:
    1. Если стрим конечный, то ты можешь собрать все айтемы в лист и вернуть его как обычно.

    2. Использовать websocket - тут надо будет подумать, как лучше это подружить со сложившейся у тебя архитектурой.
    Как минимум нужно будет добавить js на фронт и создавать долгоживущую задачу на бэке
    Ответ написан
    2 комментария
  • Можно ли просмотреть репосты записи в Telegram?

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

    В обоих случаях тебе нужно будет прочитать всю историю из соответствующих аккаунтов.
    Сам Telegram предоставляет только количественную статистику.
    Ответ написан
    3 комментария
  • Может ли браузерный javascript обработать post запрос?

    vabka
    @vabka
    Токсичный шарпист
    Браузерный js работает только в браузере и не имеет доступа к файлам на сервере и не может никак обрабатывать запросы, которые на сервер поступают.

    Обработать post-запрос, в твоём случае, может только веб сервер.

    Но узнать размер картинки и название файла ты можешь и без отправки файла на сервер
    Ответ написан
    Комментировать
  • Есть один Google SDK, как его подключить?

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

    Раз возникает ошибка с CORS - посмотри какие заголовки возвращает imasdk.googleapis.com - там будет понятно.
    https://developer.mozilla.org/ru/docs/Web/HTTP/CORS
    Ответ написан
    Комментировать
  • Как сделать чтобы PHP скрипт по завершении работы отправлял на фронт уведомление?

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

    Или например при выполнении скрипта на бэке записывать в базу результат а фронт будет через 5 минут спрашивать бэк все ли готово?

    Этот вариант в любом случае придётся реализовать, тк ты не можешь гарантировать, что всё время от запроса до итогового результата у пользователя будет работать сеть.

    Я рекомендую всётаки озадачиться вебсокетами, тк это сейчас наиболее стандартный спобом общения клиента с сервером в реальном времени.

    Без вебсокетов можно попробовать server sent events, но лично я никогда ихне пробовал и не знаю подводных.
    Ответ написан
    Комментировать
  • Замыкания не существует?

    vabka
    @vabka
    Токсичный шарпист
    Замыкания есть.
    Только в спецификации это называется "Lexical Environment" (п 8.1)
    https://262.ecma-international.org/10.0/#sec-lexic...
    Вот ещё с MDN:
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    Ответ написан
    Комментировать
  • Как запарсить дату?

    vabka
    @vabka
    Токсичный шарпист
    Чтобы спарсить:
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    Чтобы узнать разницу в годах:
    function yearDiff(dt1, dt2) 
     {
     
      var diffYear =(dt2.getTime() - dt1.getTime()) / 1000;
       diffYear /= (60 * 60 * 24);
      return Math.abs(Math.round(diffYear/365.25));
       
     }
    Ответ написан
    Комментировать
  • Как стилизовать яндекс карту?

    vabka
    @vabka
    Токсичный шарпист
    Метки на карте - через кастомные балуны и метки.
    https://yandex.ru/dev/maps/jsbox/2.1/placemark
    https://yandex.ru/dev/maps/jsbox/2.1/balloon_and_hint

    Прозрачную менюшку можно через custom_control сделать: https://yandex.ru/dev/maps/jsbox/2.1/custom_control
    Ответ написан
    2 комментария
  • Что ещё проверять для безопасности?

    vabka
    @vabka
    Токсичный шарпист
    Вот эта строка ничего не делает :)
    if(message.length > 150) message.substring(0, 150)

    Конкретно в показанном коде больше никаких уязвимостей не видно.
    Так что только общие советы - открывай OWASP и проверяй всё по порядку для своего приложения.
    Ответ написан
    4 комментария
  • Как сравнить объекты и найти различия?

    vabka
    @vabka
    Токсичный шарпист
    Мне кажется, такой вариант вам может подойти:
    function generateJsonPatch(obj1, obj2) {
      const patch = [];
    
      // Рекурсивно обходим все свойства первого объекта
      for (const prop in obj1) {
        if (obj1.hasOwnProperty(prop)) {
          // Если свойство отсутствует во втором объекте, удаляем его
          if (!obj2.hasOwnProperty(prop)) {
            patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
          } else {
            // Если свойство является объектом или массивом, рекурсивно обходим его
            if (typeof obj1[prop] === "object") {
              patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
                p.path = `/${prop}${p.path}`;
                return p;
              }));
            } else {
              // Если значение свойства отличается от значения во втором объекте, обновляем его
              if (obj1[prop] !== obj2[prop]) {
                patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
              }
            }
          }
        }
      }
    
      // Обходим свойства второго объекта, которых нет в первом объекте
      for (const prop in obj2) {
        if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
          // Добавляем новое свойство
          patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
        }
      }
    
      return patch;
    }

    Вот что он выдаёт в вашем случае:
    [ { op: 'replace', path: '/colorQty', value: 1, oldVal: 0 } ]


    Код генерировал не я. Я попросил ChatGPT:
    prompt и оригинальный ответ



    Напиши функцию на javascript, которая принимает в себя два js-объекта или массива, на выходе я должен получить jsonpatch, который можно применить к первому объекту, чтобы получился объект идентичный второму

    ... вариант без oldValue ...

    добавь ещё в каждую операцию jsonpatch и старое значение, чтобы при чтении было понятно, что на что заменяется

    Вот обновлённый код функции generateJsonPatch с добавлением старого значения в каждую операцию jsonpatch:

    function generateJsonPatch(obj1, obj2) {
      const patch = [];
    
      // Рекурсивно обходим все свойства первого объекта
      for (const prop in obj1) {
        if (obj1.hasOwnProperty(prop)) {
          // Если свойство отсутствует во втором объекте, удаляем его
          if (!obj2.hasOwnProperty(prop)) {
            patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
          } else {
            // Если свойство является объектом или массивом, рекурсивно обходим его
            if (typeof obj1[prop] === "object") {
              patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
                p.path = `/${prop}${p.path}`;
                return p;
              }));
            } else {
              // Если значение свойства отличается от значения во втором объекте, обновляем его
              if (obj1[prop] !== obj2[prop]) {
                patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
              }
            }
          }
        }
      }
    
      // Обходим свойства второго объекта, которых нет в первом объекте
      for (const prop in obj2) {
        if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
          // Добавляем новое свойство
          patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
        }
      }
    
      return patch;
    }


    Каждая операция jsonpatch теперь содержит поле `oldVal`, которое хранит старое значение свойства, которое было изменено. Если свойство было удалено или добавлено, то `oldVal` будет иметь значение `undefined`.

    Пример использования:

    const obj1 = {a: {b: "hello"}, c: [1, 2, 3]};
    const obj2 = {a: {b: "world", d: "foo"}, c: [1, 2, 4, 5], e: "bar"};
    
    const patch = generateJsonPatch(obj1, obj2);
    
    console.log(patch);
    // Output:
    // [
    //   {"op":"replace","path":"/a/b","value":"world","oldVal":"hello"},
    //   {"op":"add","path":"/a/d","value":"foo","oldVal":undefined},
    //   {"op":"remove","path":"/c/2","oldVal":3},
    //   {"op":"add","path":"/c/3","value":5,"oldVal":undefined},
    //   {"op":"add","path":"/e","value":"bar","oldVal":undefined}
    // ]


    Обратите внимание, что поле oldVal в jsonpatch содержит информацию только о тех свойствах, которые были изменены или удалены. Если свойство не было изменено, то его oldVal будет иметь значение undefined.



    PS: сам удивился, на сколько он хорош в подобных задачах. Можно было бы написать и самому, точно также рекурсивно обойдя объекты, но эта шняга сэкономила достаточно много времени.
    Ответ написан
    3 комментария