Pull to refresh

Comments 27

Больше копипасты документации богу копирайтеров!


Нет, ну честно, иногда у вас стоящие и интересные статьи, а иногда в сотый раз одно и то же. Разве что Promise.allSettled добавили.


Серьезно, в 2020 году рассказывать про метод .sort у массива.

Целевая аудитория просто разная. На Хабре ведь не только профи, но и начинающие гуляют. Я и нашёл для себя нашёл полезные моменты.
Или забрасываемые в эти джунгли раз в месяц(=

Я бы не хотел работать с человеком, который изучает JS по статьям такого качества и настолько разбросанным по тематике. Одно дело когда что-то новенькое или спорное всплывает, вроде недавних immutable set'ов и объектов. Но нет, в этой статье рассказывают ни о чём, да ещё и без нормального объяснения.


Если человек хочет научиться писать на JS, пусть идёт на learn.javascript.ru. Там и контент качественнее и хоть какая-то систематизация информации. А такие вот статьи — просто бред сивой кобылы. Они новичкам только вредить могут, а профи от них только бесятся. Бессмысленная трата времени и читающих, и пишущего.

А мне интересно, насколько хороший программист тот человек, который делает вывод о том, что изучает другой человек исходя из одного комментария. Так ведь можно и в работе прийти к выводу «вы знаете лучше заказчика, что нужно заказчику».

Я изучаю JS через интерактивные курсы htmlacademy (знакомиться с языком лучше там — пройдено), через learn.javascript.ru, через CodeWars. А интересные статьи на Хабре, например, как эта, иногда неплохо дополняют тот же learn.javascript.ru. Главное — выбирать только нужные кусочки и отсеивать всё лишнее.

И я понимаю, что даже через 2-3 года нельзя зазнаваться и пропускать «новичковые материалы» — это способ избежать «зашоренности» и механического подхода к программированию. Мало ли, вдруг что-то важное пропустил и забыл, или новичок изобрёл новый полезный трюк, просто потому, что не знал, что «это невозможно».
человек, который делает вывод о том, что изучает другой человек исходя из одного комментария

Если вы спроецировали мой комментарий на себя лично, уж простите, но я не к вам обращался, а вообще к людям которые приходят в веб из вот этих статей, думая что наберут вот таких вот pro tips и станут хорошими программистами. А таких к сожалению много, и их шлейф тянется со времен jquery.


И я понимаю, что даже через 2-3 года нельзя зазнаваться и пропускать «новичковые материалы» — это способ избежать «зашоренности»

Держать руку на пульсе совершенно не значит смотреть материалы для новичков. Наоборот, это следить за пропоузалами, смотреть документацию и примеры реального использования новых фич. С обсуждением и осознанием плюсов или минусов определенных фич.


Например при выходе es6 сразу можно было заметить, что часть людей побежали использовать везде промисы, а часть продолжала сидеть себе спокойно на bluebird — консистентность кода важнее хайповых фичей.


Новичок отличается от «зашоренного» профи тем, что не способен сказать почему конкретно он не будет использовать ту или иную фичу. Новичок будет смотреть на новый синтаксис и обтекать слюнями, а профи посмотрит и скажет, что не будет его использовать, потому что в случае чего явисты из соседнего отдела не смогут поправить в коде что-то во время отпуска этого самого профи.


новичок изобрёл новый полезный трюк, просто потому, что не знал, что «это невозможно».

А трюкачества все никому не нужны. Потому что они никому кроме самого трюкача не понятны, и в случае чего даже сам трюкач может не вспомнить зачем он это делал.

Не все эти моменты нужны «начинающим», особенно «деструктирующее присваивание», термин-то какой…

Не упомянули про то, что splice модифицирует массив оригинал, или что Вы подразумевали под «получить последние элементы массива»?

Да и использование «new Set» просто для получения уникальных записей в боооольшом массиве — может привести к необоснованной трате ресурсов.

Просто если уж советы «новичкам», то как-то поразвёрнутее бы…
Пункт 4, неужели никто никогда не вспоминает про reduce, зачем вы делаете два прохода, производя 2 массива, если можно всё это сделать в одну итерацию с какими-то явными проверками.

Зачем упоминать про ES2020, если тут нет практически ни одной фичи из последних реализаций, например nullish или pipe. Очередная копипаста 100500 подобных статей ради плюсов, без практической пользы для сообщества.

Насчёт 4 пункта вы одновременно и правы, и нет. Можно сделать всё в один прогон с помощью reduce.


Кто не знает, это делается примерно вот так:


myArray.reduce((acc, current) => {
    if (!Boolean(current)) {
        return;
    }
    // ...
    return acc.push(current);
}, []);

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


Не важно сколько прогонов 1, 2 или 1000. On = 2On. Сложность алгоритма не увеличивается, а константы мы не считаем.


К тому же пункт всё-таки был не про это, а про filter(Boolean).

Конечно же, в строке


return acc.push(current);

должно быть, на самом деле,


return [...acc, current];

Зачем на каждой итерации создавать новый массив, посмотрите какая у вас сложность алгоритма выходит? Делайте просто acc.push(); return acc;

Тоже верно. У меня просто уже иммутабельность головного мозга)

Пункт 4, неужели никто никогда не вспоминает про reduce, зачем вы делаете два прохода, производя 2 массива, если можно всё это сделать в одну итерацию с какими-то явными проверками.
Да можно flatmap, если вы стильный, модный, молодёжный.
В более толковых языках map и filter будут возвращать не сконструированные массивы, а что-то вроде view/итераторов, поэтому замена map+filter на reduce производительности особо прибавлять не будет, а читабельность уменьшит.

В JavaScript это, конечно же, не так. Но я всё равно не считаю нужным заменять map+filter на reduce, даже в JavaScript — за исключением случаев, когда производительность крайне важна, конечно же. Просто по принципу «та мне проще вам штраф заплатить, чем руку сбивать».
В стандарте ES2020 имеется немало новых возможностей, с которыми вам, вероятно, захочется познакомиться поближе.

Но не в рамках этой статьи.

Чуть ли не всё это есть в книге "ES6 и не только"

пробежал по диагонали. читается не слишком легко. какой процент людей поймёт такое определение:
Полизаполнения (polyfills), которые также
называют библиотеками Shim, представляют собой шаблоны для
определения поведений из новой среды для более старых сред.
Не помню, как именно написана книга, но полагаю, после определения идут пояснения и примеры. Мне книга помогла понять нововведения ES6, в котором я тогда не ориентировался.
Этот простой приём позволяет отключить на странице функционал правой кнопки мыши.
<body oncontextmenu="return false">


11. Этот простой приём позволяет залить фон страницы красным цветом.
<body bgcolor="red">


надеюсь, получилось не слишком тонко?
У меня такое ощущение, что точно такую же статью я читал тут в прошлом году. Ну, может пару пунктов поменялось.
Уберите пункт про контекстное меню, ну правда же. Им начинают пользоваться ради «защиты от копирования» и когда тебе правда нужно контекстное меню — его нет, бесит жутко.
Этот пункт обходится нажатием Shift с правым кликом.
Подборка малость сумбурна.

1. Сделано-то хорошо, но узко. Иронично то, что обязательный параметр num может быть null. Обязательный, но не слишком. Фактически это не isRequired, а isDefined. Для обязательных по-прежнему нужен != null. Для опциональных — arguments.length и rest.length.

2. Быстрый рецепт:

console.log(JSON.stringify(obj, 0, 2));

7. Со стороны разработчика: повесить на window, а еще лучше — ничего. Со стороны пользователя, в зависимости от контекста: Ctrl+Alt+C, или Allow Right-Click, или Ctrl+F4.

10. Promise.allSettled
Sign up to leave a comment.