• Javascript: Нужно ли использовать; в конце строк?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В целом, определяется стайлгайдом, который вы используете.
    Но есть случаи, когда ставить обязательно, например, если на следующей строке деструктуризация массива.
    foo = bar + baz
    [bat] = biz
    Ответ написан
    4 комментария
  • Javascript: Нужно ли использовать; в конце строк?

    @Nikita1244
    Anonymous
    Можете юзать, можете не юзать. Лично у меня привычка ставить точки с запятой в конце. Она "предохранитель" от некоторых ошибок
    Ответ написан
    1 комментарий
  • Как сделать чтобы js применялись только к определенному диву?

    @Nikita1244
    Anonymous
    Соглашусь с ответом webjun , нужно просто указать айдишник чтобы выбрать один из дивов с одинаковым классом. Айди обозначает уникальный элемент. Просто присвойте одному айди из всех дивов

    Пример:
    <div class="div" id="name-id"></div> <!-- первый див c айдишником name-id -->
    <div class="div"></div><!-- второй див -->
    <div class="div"></div><!-- третий див -->

    const div = document.querySelector("#name-id") 
    /* Как я уже сказал ранее, айдишник присваивается только ОДНОМУ, УНИКАЛЬНОМУ ЭЛЕМЕНТУ. 
    Здесь мы получим первый див. 
    */
    // и делаем что хотим дальше с элементом
    Ответ написан
    Комментировать
  • Как добавить класс active при переходе на другую страницу html?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Дык после перехода на другую страницу это уже совершенно другие элементы и класс, применённый на предыдущей странице, никакого значения не имеет.
    Либо передавайте класс из бэкенда, либо (если он статический) в цикле сравнивайте url страницы (window.location.pathname) с href ссылки и ставьте класс при совпадении.
    Ответ написан
    1 комментарий
  • Почему Rust нужна хэш-функция для реализации объектов, а JS такое не использует?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С помощью HTML и CSS.
    Ваш К.О.
    Ответ написан
    3 комментария
  • Как удалить все двоеточия и точки с запятой но оставить первые два двоеточия?

    @Azperin
    Дилетант
    var str = 'Камера:Разрешение фото и видео:фото: 3840х2160P; видео: 1920х1080P';
    var arr = str.replaceAll(';', '').split(':');
    var result = `${ arr.splice(0, 1)[0]} : ${ arr.join('') }`;

    С регуляркой не знаю, но предложу такой вариант на JS
    Ответ написан
    1 комментарий
  • Как удалить все двоеточия и точки с запятой но оставить первые два двоеточия?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Удалить символ только если ранее уже было два подобных
    s = 'Камера:Разрешение фото и видео:фото: 3840х2160P; видео: 1920х1080P'
    result = s.replace(/(?<=(?:.+?[:;]){2})(.+?)[:;]/g, '$1')
    // Получим result:
        'Камера:Разрешение фото и видео:фото 3840х2160P видео 1920х1080P'

    https://regex101.com/r/gWZ7Ap/1
    Ответ написан
    3 комментария
  • Не до конца правильно работает добавление текста на страницу, как исправить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если вам надо заменить содержимое нескольких элементов с одинаковым классом, то и выбирать надо не один элемент, а несколько. Соответственно и замену надо производить циклом.
    const today = String((new Date()).getDate()).padStart(2, '0');
    
    const dayStartElements = document.querySelectorAll(".js-text");
    dayStartElements.forEach((el) => { el.innerText = `${dd}` });
    Ответ написан
    1 комментарий
  • Как сделать формат данных в цикле?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const clone = (data, replacements) =>
      data instanceof Object
        ? data instanceof Array
          ? data.map(n => clone(replacements?.hasOwnProperty(n) ? replacements[n] : n, replacements))
          : Object.fromEntries(Object.entries(data).map(([ k, v ]) => [
              k,
              clone(replacements?.hasOwnProperty(k) ? replacements[k] : v, replacements)
            ]))
        : data;
    
    
    const products = arr.map(n => clone(obj.product[0], n));
    Ответ написан
    4 комментария
  • Почему не записываются буквы при регистрации?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уж сколько раз твердили миру...
    На конференции к звездам надо приходить запросы надо выполнять подготовленными.
    А не вот это вот всё.
    Иначе проблемы с буквами покажутся детской щекоткой.
    Какой вообще смысл делать регистрацию, если любой школьник сможет войти под чужой учёткой вообще без пароля, через простейшую SQL инъекцию?

    Надо забыть про mysqli_query и освоить функции prepare(), bind_param(), и execute(). Причём не только для insert, но и для select тоже. Потому что через него можно будет повытаскивать все пароли. Поскольку они ещё и не захэшированы.
    Ответ написан
    Комментировать
  • Бывали ли случаи, что deprecated-код вновь объявляли актуальным?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Deprecated не так страшен. Для java экосистемы такой стикер может висеть по много лет. За это время вы успеете поменять проект.

    Более хуже ситуация когда разработчик завязался на недокументированное поведение а его (поведение) в новых версиях исправили. Шок трудно описать :)
    Ответ написан
    Комментировать
  • Бывали ли случаи, что deprecated-код вновь объявляли актуальным?

    Griboks
    @Griboks
    Никогда такого не встречал. Но встречал чуть чаще чем всегда что-то вроде "foo is deprecatd and will be removed in version 123, use bar istead".

    Но чаще всего я встречаю ошибки вида "мы втихую поменяли логику foo, поэтому все программы с обновлением нашей библиотеки просто не работают - это ваши проблемы, следите за нашим новостным сайтом сами".
    Ответ написан
    1 комментарий
  • Бывали ли случаи, что deprecated-код вновь объявляли актуальным?

    Думаю, такое вполне могло когда-то случиться, но ситуация в целом странная:
    1. Deprecated объявляют уже после появления альтернативы
    2. Deprecated обычно объявляют, что удалят в такой-то версии

    Получается, если раздепрекейтить какой-то метод, то у тебя в будет два способа делать одно и тоже, и придётся официально поддерживать оба варианта. Зачем добровольно брать себе двойную работу?
    Ответ написан
    2 комментария
  • Полезно ли долго (и вообще) «велосипедить» в программировании?

    Moskus
    @Moskus
    Когда советуют, убедитесь, что у вас и у аудитории этого совета одна цель. Потому что "как можно скорее начать пользоваться фреймворками" - это если задача - как можно скорее начать шлёпать продукт и деньги получать. А если задача - научиться программировать, фреймворки тут не при чем.
    Ответ написан
    14 комментариев
  • Полезно ли долго (и вообще) «велосипедить» в программировании?

    я замечаю что гораздо лучше всё усваиваю когда делаю всё с нуля

    Поверьте - так у всех.

    Но вы обратили внимание, что в школе вам рассказывали про опыты Галилея, а не дали два шарика и не сказали - разберитесь какой из них падает быстрее?

    Представьте что вы велосипедите долго-долго и разобрались с авторизацией и загрузкой файлов вдоль и поперек, а потом все же сталкиваетесь с каким-нибудь фреймворком и смотрите, а там загрузка сделана так же как у вас и вы бы могли не тратить год, на то чтобы дойти до этого, а просто сразу посмотреть. Смотрите на авторизацию и думаете - "о, а чо так тоже можно было?"

    Объем знаний слишком велик чтобы полсностью сгенерировать его самостоятельно. Best practice много и ко всем сразу сам не придешь. Чему-то учиться придется.
    Поэтому наилучшая схема чуть-чуть повелосипедить. Изучить пару фреймворков. Попробовать опять повелосипедить. Изучить еще один, а там, может быть, присоединиться к разработке какого-то..
    Ответ написан
    Комментировать
  • Живы ли вэб-компоненты?

    Suntechnic
    @Suntechnic Автор вопроса
    Мой собственный ответ после изучения темы и чтения иностранных коллег будет таким:

    Технология была многообещающей и интересной на старте. Для ее поддержки гугл даже придумал отдельную спецификацию HTML Imports: https://w3c.github.io/webcomponents/spec/imports/i... (можете не ходить, там 404), что позволяло подключать однофайловые компоненты прямо в документ так:
    <link rel="import" href="my-component.html">
    Классно же да?

    Но технология не приобрела популярности, возможно так как была слишком простой и понятной, а именно в это время на пик славы вышел npm, gulp и вот это всё. В моду входила непонятная магия, утрата контроля над кодом и всякие оптимизаторы позволявшие сделать для одного слайдера на главной страницы бандл в полтора, а иногда 2-3 Мб. кода, и всё это без всяких там jQuеry.
    Ребята одумались и убрали спецификацию HTML Imports, предлагая разбивать компоненты на 3 отдельных файла - js, css и html с шаблоном. Причём js надо было подключать на странице, css тоже, а html должен был загружать по задумке создателей уже в само js. Такой подход позволял резко усложнить работу с web-components и сделать код снова неуправляемым, но было поздно - технология уже уступила позиции конкурентам.
    Конечно это был сарказм, если кто-то не понял.

    Жизнь в этой идее еще теплится, но теперь нам предлагается писать код в трех файлах или помещать его целиком в js, или использовать со специальными загрузчиками, что сопоставимо с использованием какого-нибудь фреймворка, того же Vue, дающее теме же усилиями гораздо большие возможности и смысл использовать веб-компоненты отпадает окончательно.

    Короче технология по задумке хорошая, но на практике не применимая, поэтому широкого распространения и не получает.
    Ответ написан
    2 комментария
  • Почему при обращении по ключу объекта, который сам (ключ) является объектом, всегда возвращается значение последнего ключа?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Ключи объектов - это строки, если использовать нестроковое значение в качестве ключа, оно будет преобразовано в строку, дефолтное строковое представление объекта - это "[object Object]". Всё.

    Хотите, чтобы объект реально был ключом - записывайте его в Map вместо простого объекта. Или научите свои объекты представлять себя в виде строки, переопределив у них метод toString (конечно, поступать так имеет смысл только в том случае, если вы можете гарантировать, что строковые представления будут уникальны).
    Ответ написан
    5 комментариев
  • Как исправить проблему с созданием регистрации пользователей?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это всё просто ужасно. Начиная прямо с первой строчки, class Register extends Database
    Делать отдельный класс для регистрации глупо. Если уж делать класс, то для манипуляции юзером в целом, а не одной только регистрации. Плюс, регистрация пользователя - это не база данных. И не должна наследовать классу Database.
    По сути, вы хотите натянуть ООП на обычное процедурное программирование. Не надо этого делать, получится самолёт из соломы. Сделайте простую функцию.

    Но это ещё цветочки. Остальных проблем тут выше крыши:
    1. Никогда не используйте сокращённый синтаксис INSERT. Всегда надо явно перечислять поля. Это, скорее всего, и является причиной ошибки. Но даже если нет, то проблемы всё равно вылезут в будущем
    2. Собственно сообщение об ошибке нам и надо получить от базы данных, чтобы понять в чем проблема. для этого к коду соединения с БД надо добавить строчку
      mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      и после этого смотреть сообщение об ошибке
    3. Самое главное - SQL инъекция. Какой смысл делать регистрацию вообще, если любой дурак узнает пароли всех остальных пользователей или сможет авторизоваться вообще без пароля? Запросы надо выполнять только через подготовленные выражения
    4. И по поводу паролей. Пароли надо хранить в фаршированном виде, обработанными функцией password_hash()
    Ответ написан
    Комментировать
  • Как сделать каскадный селект?

    0xD34F
    @0xD34F Куратор тега JavaScript
    <select id="event"></select>
    <select id="dates"></select>

    const events = [
      { name: '...', dates: [ ... ] },
      { name: '...', dates: [ ... ] },
      ...
    ];
    
    const eventEl = document.querySelector('#event');
    const datesEl = document.querySelector('#dates');
    
    eventEl.innerHTML = events
      .map((n, i) => `<option value="${i}">${n.name}</option>`)
      .join('');
    
    eventEl.addEventListener('change', function() {
      datesEl.innerHTML = events[this.value].dates
        .map(n => `<option>${n}</option>`)
        .join('');
    });
    
    eventEl.dispatchEvent(new Event('change'));
    Ответ написан