Ответы пользователя по тегу JavaScript
  • Как перевести число в букву столбца как в EXCEL?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    @a13xsus: 100 — это CV

    function numberToId(number) {
        var letters = "ABCDEFGHIJKLMNOPQRSTUVWYXZ"; // Алфавит
        var output = "";
        while(number) {
            output = letters[(number - 1) % letters.length] + output;
            number = Math.floor(number / letters.length);
        }
        return output;
    }

    Примеры
    Ответ написан
    Комментировать
  • Как вывести символ Юникода категории Cf?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Ну хоть погуглили бы для приличия.

    Zero width joiner:
    Например, у Вас есть символы a и b (условно). В некоторых языках (c) они обычно пишутся раздельно, но Вам нужно сделать лигатуру. Как ее сделать? Правильно: a ZWJ b.
    Примеры

    Zero width non-joiner:
    Пусть у Вас есть символы o и ~. В некоторых языках они обычно пишутся слитно (~ над o), но Вам нужно написать из раздельно (o~). Как это сделать? Правильно: o ZWNJ ~.
    Примеры

    Обычно оба этих символа никак не отображаются. Почему? Читай выше.
    Ответ написан
    Комментировать
  • Как заменить \ в строке js???

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    replace("\", "")
    Здесь вы экранируете ", и код падает с синтаксической ошибкой.

    replace("\\", "")
    А здесь мы убираем только первый встретившийся слэш.

    replace(/\\/g, "")
    А здесь мы (возможно, к Вашему случаю это не относится) переводим валидный \\ в пустую строку, хотя должно быть \

    replace(/\\(.)/g, "\1")
    *обдумывает минусы подхода*
    Ответ написан
    Комментировать
  • При наведении на кнопку, подсвечивался столбец таблицы??

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    <div class="column-wrapper">
      <div class="column-button">Заказать</div>
      <div class="column"></div>
    </div>


    .column-wrapper {
      position: relative;
    }
    .column {
      display: inline-block;
      width: 200px;
      height: 300px;
    }
    .column-button {
      display: inline-block;
      width: 180px;
      height: 30px;
      position: absolute;
      left: 10px;
      bottom: 20px;
    }
    .column-button:hover ~ .column {
      /* Меняем .column при наведении на кнопку */
    }


    Привел минимальный код. Если хочется посмотреть в действии, с красивостями, https://jsfiddle.net/Ivanq/pystopLx/

    Приходится ставить кнопку перед столбцом, потому что иначе обратиться нельзя.
    Ответ написан
  • Что за сокращения в циклах for?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    u>>=1 - u = Math.floor(u / 2).
    u&1 - u % 2.
    u<1<<c - u < Math.pow(2, c).
    Ответ написан
    Комментировать
  • Как положительные числа преобразуются в отрицательные?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    +/- нет в памяти. Есть только 0/1. Запись отрицательных чисел, как вы показали, называется дополнительный код. Он удобен при счете, так как практически не отличается от счета беззнаковых чисел.
    Например (8 бит):
    -
      00000010 (2)
    - 00000100 (4)
      --------
      11111110 (-2)
    
      11111111 (-1)
    + 00000011 (3)
      --------
     100000010 (2) - здесь старший бит отбрасывается, так как у нас не больше 8 бит


    Вы правы, если рассматривать 11111111111111111111111111111110 как беззнаковое число, это 4294967294. Но это знаковое число! Старший (первый) бит показывает 1, значит, это отрицательное число.
    1. Инвертируем биты: 00000000000000000000000000000001
    2. Прибавляем 1: 00000000000000000000000000000010
    3. Переводим в десятичную систему: 2.
    4. Добавляем -: -2.
    Ответ написан
    Комментировать
  • Как сделать редирект при нажатии на button?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    $("#btn").click(function() {
      location.href = "http://example.com";
    });
    Ответ написан
    Комментировать
  • Где ошибка в проверка ввода?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Алексей Ярков:

    return idCheck;
    return nameCheck;
    return emailCheck

    Вы серьезно?

    LoranDeMarcus:

    Даже без ... все равно проверку на валидацию не проходит. Теперь просто добавляет пользователей без проверки.


    Вы серьезно? Когда несколько return подряд, возвращается первый (idCheck). Когда return нет, возвращается undefined, который в if становится false. Нужно сделать
    return idCheck && nameCheck && emailCheck;
    Ответ написан
  • Почему неправильно работают операторы с 64 битным числом?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Числа в JS на самом деле - float. И в float 2 ^ 63 можно представить, а в int - нет. Битовые операции проводятся над интом, то есть float переводится в int, и биты теряются. Можно разбить число на несколько меньших, проводить операции на них, а потом склеивать.
    Ответ написан
    Комментировать
  • Что делает этот код?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Это одно выражение - a, b. Сначала выполняется левая часть ((console.log('a'))), потом правая - (function () { console.log('b') }) и возвращается последняя.

    То есть, при выполнении этих строк в консоль выведется "a" и возвратится функция, пишущая "b".
    Ответ написан
    6 комментариев
  • Как выбрать последние цифры в строке используя регулярные выражения?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    var str = "matrix(1 0 0 1 40 230)";
    var matched = str.match(/(\d+)\s+(\d+)\)$/);
    
    console.log(matched[1]); // 40
    console.log(matched[2]); // 230


    Я бы не советовал разбирать такую строку регулярками, тем более, что без них (почти) это сделать еще проще и понятнее:
    var str = "matrix(1 0 0 1 40 230)";
    var content = str.match(/\((.+)\)/)[1]; // То, что в скобках
    content = content.split(" "); // Поделить по пробелам
    console.log(content); // [1, 0, 0, 1, 40, 230]
    Ответ написан
  • Как определить, что пользователь зашел с chrome?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    stackoverflow.com/a/13348618
    function isChrome() {
      var isChromium = window.chrome,
        winNav = window.navigator,
        vendorName = winNav.vendor,
        isOpera = winNav.userAgent.indexOf("OPR") > -1,
        isIEedge = winNav.userAgent.indexOf("Edge") > -1,
        isIOSChrome = winNav.userAgent.match("CriOS");
    
      if(isIOSChrome){
        return true;
      } else if(isChromium !== null && isChromium !== undefined && vendorName === "Google Inc." && isOpera == false && isIEedge == false) {
        return true;
      } else { 
        return false;
      }
    }
    Ответ написан
    Комментировать
  • Аякс и валидация на сервере?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Валидировать лучше везде.

    Пример:
    Можно закачать до 5 фотографий JPEG

    На клиенте:
    Проверить, что файлов <= 5, иначе вывести сообщение.
    Проверить, что файлов >= 1, иначе вывести сообщение.
    Проверить, что файлы в формате JPEG, иначе вывести сообщение.

    На сервере:
    То же самое, но вместо вывода сообщения - "error #001: files > 5" и т. п.

    На клиенте - чтобы можно было быстро, красиво вывести сообщение, не отправляя 200 гигов на сервер.
    На сервере - чтобы не пропустить хакеров ламеров, которые будут заливать котиков, обойдя JS.
    Ответ написан
  • Как вывести прогресс работы WebWorker-а?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Worker
    const keypair = require('keypair');
    
    onmessage = (e) => {
      let time = Date.now();
      let workerResult = keypair(e.data);
      postMessage({
        result: workerResult,
        time: Date.now() - time
      });
    }


    Client
    if (window.Worker) {
      let container = document.querySelector('#container');
      let myWorker = new Worker("worker.js");
      myWorker.onmessage = (e) => {
        container.innerHTML = e.data.result + " in " + e.data.time + "ms";
        console.log('Message received from worker');
      };
      myWorker.postMessage({"bits": 2048});
    }
    else {
      console.log('window.Worker Error');
    }
    Ответ написан
    3 комментария
  • Как в js работает SyntaxError в throw?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    throw new Error(...); бросает исключение - что-то типа сигнализатора ошибки. Когда выбрасывается исключение, исключительную ситуацию нужно как-то обработать.
    Обычно ошибка выводится в консоль, а функция, ее caller, caller caller'а и т. д. завершают работу, так как данные испорчены и обрабатывать их нет смысла.

    ------------------------------------ try ------------------------------------
    Однако иногда нужно обработать ошибку иначе.
    try { // Пробуем (try) исполнить код
        move();
        // Код, который может выбросить исключение
    } catch(e) { // Ловим (catch) исключение, если оно было выброшено, записываем его в e (можно любую переменную, но к e все уже привыкли)
        alert("ERROR");
        // Выводим ошибку или обрабатываем ее еще как-то
    }


    Стоит добавить, что после catch(e) можно написать finally - код, который будет выполнен, и если код выполнился, и если упал с ошибкой
    try { // Пробуем (try) исполнить код
        move();
        // Код, который может выбросить исключение
    } catch(e) { // Ловим (catch) исключение, если оно было выброшено, записываем его в e (можно любую переменную, но к e все уже привыкли)
        alert("ERROR");
        // Выводим ошибку или обрабатываем ее еще как-то
    } finally {
        alert("It worked (or didn't :) )");
    }


    ------------------------------------ throw ------------------------------------
    Мы можем бросить ошибку с помощью оператора throw, для этого ему передается исключение (или строку, или число, или другой объект, но лучше иключение). Потом брошенное исключение можно поймать с помощью try.
    Кстати, бросать исключение можно и внутри catch, тогда оно перейдет к следующему catch - это называется проброс исключений. Например:
    function doThat() {
        try {
            a();
        } catch(e) {
            if(e instanceof TypeError) { // Если выброшено исключение TypeError, то
                alert("TypeError!"); // написать TypeError!
            } else { // Иначе
                throw e; // doThat() не знает, как обрабатывать другие типы исключений, передаем дальше
            }
        }
    }
    // ...
    try {
        doThat(); // Если a() выбросит TypeError, catch в doThat() его обработает
    } catch(e) { // doThat() пробросил исключение дальше
        alert("Some other error!");
    }


    ------------------------------------ Код в примере ------------------------------------
    Мне кажется,
    move();
      if (!y || !x || !z) {
        throw new Error("не хватает данных"); 
      }

    стоит переписать так:
    if (!x || !y) {
        throw new Error("не хватает входных данных"); 
    }
    move();
    if (!z) {
        throw new Error("не хватает выходных данных"); 
    }

    Лучше не вызывать move(), если мы не уверены, что данных хватает - так мы проверяем, что входные и выходные данные правильные.
    Ответ написан
    Комментировать
  • Как передать modelAttribute через js??

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    <form:form action="/booking/movie" id="form">
            Movie ID : <form:input path="movieId"/>
            <input type="submit"/>
        </form:form>

    var form = document.getElementById("form");
    form.setAttribute("modelAttribute", "ticketForm");
    Ответ написан
    Комментировать
  • Есть ли событие появления переменной?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Люди, что вы зациклились на jQuery?

    Можно ведь сделать проще. Предположу, что у вас что-то типа того:
    var done = false;
    var result = "";
    obj.ondone = function(e) { // здесь любое событие
        done = true;
        result = e.result;
        // хотим отловить этот момент
    };


    Теперь смотрите: если переменная объявлена через var, то только так:
    var func = function(callback) {
        obj.ondone = function(e) {
            callback(e.result);
        };
    };
    func(function(result) {
        alert(result);
    });

    Можно еще промисы прикрутить и т. п., но Вы меня поняли.

    Если переменная глобальная, лучше использовать вариант выше, но в крайнем случае так:
    _done = false;
    _result = "";
    
    function func() {
        obj.ondone = function(e) {
            _done = true;
            _result = e.result;
        };
    }
    
    setTimeout(function f() {
        if(_done) {
            // готово
        } else {
            setTimeout(f, 500); // каждые 0.5 с
        }
    }, 500); // каждые 0.5 с
    func();
    Ответ написан
    Комментировать
  • Как из json получить объект с ключами не по порядку?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    $.jsonParse Пфф... джиквери_головного_мозга какой-то.

    Если можно чуть поменять JSON на {"2": "cvxcsv", "7": "dfsdsf"}:
    var str = "{\"2\": \"cvxcsv\", \"7\": \"dfsdsf\"}";
    var obj = JSON.parse(str);
    console.log(obj); // {"2": "cvxcsv", "7": "dfsdsf"};
    var str2 = JSON.stringify(obj);
    console.log(str2); // "{"2": "cvxcsv", "7": "dfsdsf"}"


    Если нельзя:
    eval regexp зря я это написал
    jQuery не умеет без кавычек, поэтому нужно использовать библиотеку, например json_parse.js.

    И вообще, люди, перелезайте на Vanilla JS!
    Ответ написан
    Комментировать