Ответы пользователя по тегу JavaScript
  • Не пойму работу Object.assign() для documentElement?

    liaFcipE
    @liaFcipE
    > не понимаю, почему не работает 2й.

    document.querySelector('.layers__container').style.transform = `rotateX(${moveY})`
    document.querySelector('.layers__container').style.transform = `rotateY(${moveX})`


    Потому, что ты перетираешь значение style.transform двумя разными значениями, второе заменяет первое.

    > метод Object.assign инлайново прописал для documentElement АТРИБУТ style.
    Не совсем, он буквально сделал:

    document.documentElement.style.prop1 = "value1";
    document.documentElement.style.prop2 = "value2";

    Сам он ничего не прописывал, это уже логика работы DOM ноды и ее API.
    Просто прочти документацию к Object.assign, лучше в отрыве от DOM API, ибо у DOM API и его объектов есть свои магические методы, геттеры, сеттеры и прочее:

    65a456eb32d63620125871.png

    > console.log(Object.entries(document.documentElement)) то выведутся все пары ключ+значение

    У "простых" объектов - да, но все сложнее. Если посмотреть MDN описание для Object.entries, то можно увидеть, что он отдает только перечисляемые свойства: An array of strings representing the given object's own enumerable string-keyed property keys.
    Ответ написан
    1 комментарий
  • Почему неправильно перемешиваются элементы в массиве?

    liaFcipE
    @liaFcipE
    1. Где декларация функции shuffle?
    2. Чего вы ожидали от вызова shuffle(questionsDat);?

    Даже если допустить, что функция у вас где-то есть, то что этот вызов должен сделать? В теории функция shuffle может напрямую изменить входящий массив, но обычно так никто не делает, обычно все идут по пути иммутабельности. Т.е. вам нужно использовать то, что возвращает shuffle.

    Если хотите мутировать исходный массив, можно взять Array.sort и Math.random.

    questionsDat.sort(() => .5 - Math.random())
    Ответ написан
  • Почему получается число отличное от калькулятора?

    liaFcipE
    @liaFcipE Автор вопроса
    Спасибо всем, в 4 часа ночи, мне не удалось понять, что при конвертации шестнадцатеричного числа в десятичное я выйду за Number.MAX_SAFE_INTEGER.

    Решил с помощью BigInt, как и намекнул Rsa97

    function hexToSignedInt(hex) {
        hex.length % 2 !== 0 && (hex = "0" + hex);
        
        const hexAsNumber = BigInt("0x" + hex);
        const maximalValue = BigInt(Math.pow(2, hex.length / 2 * 8));
    
        if (hexAsNumber > maximalValue / 2n - 1n) {
           return Number(hexAsNumber - maximalValue)
        }
    
        return Number(hexAsNumber);
    }
    
    const result = hexToSignedInt("FFFFFFFFFFFFCCFF") // -13057n
    console.log(result);
    Ответ написан
    Комментировать
  • Как собрать проект Node.js?

    liaFcipE
    @liaFcipE
    > на Ангуляре можно набрать ng build и он соберёт пачку файлов
    > не получится "установить зависимости"

    Прочитав комментарии объясню: никак.
    Ты не понимаешь как работает Nodejs, не понимаешь что такое бекенд и фронтенд.

    Твой код, с запуском node.js сервера (createServer из node:http) не может работать собственно без самой ноды.
    Сбор статики тебе не поможет, эта статика исполняется в браузере, на клиенте. В браузере нет Node.JS.
    Тебе же нужно совсем другое окружение и исполнение кода на сервере, самой нодой. И чуточку изучения матчасти.
    Ответ написан
    1 комментарий
  • Как заменить в массиве число нацело делящихся на 3 строкой "пропускам 3 "?

    liaFcipE
    @liaFcipE
    [1,2,3,6,4,12,3,8,15,55,54,4].map(v => v % 3 ? v : "skip 3")
    // (12) [1, 2, 'skip 3', 'skip 3', 4, 'skip 3', 'skip 3', 8, 'skip 3', 55, 'skip 3', 4]
    Ответ написан
    Комментировать
  • Как лучше создать дерево через Proxy?

    liaFcipE
    @liaFcipE
    const $ = new Proxy(
      {},
      {
        get(_, n) {
          return (children, attrs) => {
            const _ = document.createElement(n);
            [children]
              .flat()
              .forEach(v => v && _.appendChild(typeof v !== "object" ? document.createTextNode(v) : v));
            Object.entries(attrs || {})?.forEach(([k, v]) => _.setAttribute(k, v));
            return _;
          };
        },
      }
    );
    
    const DOM = $.div(
      [
        $.span("first child span"),
        $.span([
          "second child span",
          $.button("button inside second span", { type: "button", id: "nicebutton" }),
        ]),
      ],
      { id: "root" }
    );
    
    console.log(DOM);


    648c6fc8a7407953194956.png
    Ответ написан
    3 комментария