Издательский дом «Питер». Вы не знаете javascript
azat-io/you-dont-know-js-ru :books: Russian translation of "You Don't Know JS" book series by @azat-io - Repository
Представляю вам серию книг, погружение в которую позволит вам окунуться в основные механизмы языка JavaScript. Первое издание серии книг в настоящий момент завершено.
Не стесняйтесь вносить свой вклад в улучшение качества материала данной серии книг, отправляйте свои PR для улучшения фрагментов кода, пояснений и т.д. Исправление опечаток также приветствуется.
О том, что послужило причиной для написания данной серии книг, вы можете узнать из Предисловия.
Содержимое
- Читать онлайн (бесплатно!): [«Начните и Совершенствуйтесь»](http://devhub.io/up & going/README.md#you-dont-know-js-up--going), Опубликовано: Купить сейчас в бумажном варианте, электронная книга бесплатна!
- Читать онлайн (бесплатно!): [«Область Видимости и Замыкания»](http://devhub.io/scope & closures/README.md#you-dont-know-js-scope--closures), Опубликовано: Купить сейчас
- Читать онлайн (бесплатно!): [«This и Прототипы Объектов»](http://devhub.io/this & object prototypes/README.md#you-dont-know-js-this--object-prototypes), Опубликовано: Купить сейчас
- Читать онлайн (бесплатно!): [«Типы и Синтаксис»](http://devhub.io/types & grammar/README.md#you-dont-know-js-types--grammar), Опубликовано: Купить сейчас
- Читать онлайн (бесплатно!): [«Асинхронность и Производительность»](http://devhub.io/async & performance/README.md#you-dont-know-js-async--performance), Опубликовано: Купить сейчас
- Читать онлайн (бесплатно!): [«ES6 и не только»](http://devhub.io/es6 & beyond/README.md#you-dont-know-js-es6--beyond), Опубликовано: Купить сейчас
Издательство
Серия книг свободно распространяется для чтения, но редактируется, производится, и публикуется в книжном издательстве O'Reilly.
Если вам нравится содержание книг, и вы хотите поддержать развитие серии, пожалуйста, приобретите книги, как только они будут доступны для продажи, там, где вы обычно их покупаете. :)
Если же вы хотите поддержать данную работу финансово, но не хотите покупать книги, вы можете это сделать через сервис Patreon, я буду глубоко признателен вам за вашу щедрость.
Очное обучение
Содержание этих книг в значительной степени состоит из учебных материалов, которые я преподаю профессионально в формате семинара под названием "Продвинутый JS: Что вам необходимо знать".
Если вам нравятся мои книги, и вы бы хотели связаться со мной по поводу очног
devhub.io
Книга «ES6 и не только» / Блог компании Издательский дом «Питер» / Хабр
Даже если у вас уже есть опыт работы с JavaScript, скорее всего, язык вы в полной мере не знаете. Особое внимание в этой книге уделяется новым функциям, появившимся в Ecmascript 6 (ES6) — последней версии стандарта JavaScript.ES6 повествует о тонкостях языка, малознакомых большинству работающих на JavaScript программистов. Вооружившись этими знаниями, вы достигнете подлинного мастерства; выучите новый синтаксис; научитесь корректно использовать итераторы, генераторы, модули и классы; сможете более эффективно работать с данными; познакомитесь с новыми API, например Array, Object, Math, Number и String; расширите функционал программ с помощью мета-программирования.
Цели и задачи
Если вы склонны заносить в черный список все, что в JavaScript кажется странным или непонятным (а некоторые привыкли поступать именно так), в какой-то момент от богатого возможностями языка у вас останется лишь пустая оболочка. Такое доступное всем подмножество механизмов JavaScript принято считать сильными сторонами этого языка, но правильнее назвать это легкими в освоении, безопасными или даже минимальными возможностями.Я (автор) предлагаю вам поступить наоборот: досконально изучить JavaScript, чтобы понять даже самые сложные его особенности. Именно о них пойдет речь в этой книге.
Мне известна склонность JS-разработчиков изучать лишь минимум, необходимый для решения конкретной задачи, но в моей книге вы не встретите распространенной рекомендации избегать сложностей.
Даже если что-то работает нужным мне образом, я не готов удовлетвориться самим этим фактом — мне важно понять, почему и как оно работает. Хотелось бы, чтобы вы разделили мой подход. Я ненавязчиво зову вас пройти по тернистой дороге, которой мало кто ходил, и полностью осмыслить, что представляет собой язык JavaScript и какие возможности он дает. И когда вы будете обладать этими знаниями, ни одна техника, ни одна платформа, ни один новый подход не окажутся за пределами вашего понимания.
Каждая из книг серии You Don’t Know JS глубоко и исчерпывающе раскрывает конкретные ключевые элементы языка, которые зачастую толкуются неверно или поверхностно. После прочтения этой литературы вы получите твердую уверенность в том, что понимаете не только теоретические, но и практические нюансы.
Те познания в JavaScript, что у вас есть, скорее всего, вы получили от людей, которые сами попали в ловушку недостаточного понимания. Это всего лишь тень того, чем JavaScript является на самом деле. Вы еще толком не знаете его, но книги серии You Don’t Know JS помогут вам наверстать упущенное. Поэтому вперед, дорогие друзья, язык JavaScript ждет вас!
ES: современность и будущее
Для чтения этой книги вы должны хорошо владеть языком JavaScript вплоть до последнего (на момент написания книги) стандарта, который называется ES5 (точнее, ES5.1), поскольку мы с вами будем рассматривать новый стандарт ES6, попутно пытаясь понять, какие перспективы ждут JS.• Scope & Closures: Известно ли вам, что в основе лексического контекста JS лежит семантика компилятора (а не интерпретатора)? Можете ли вы объяснить, каким образом замыкания являются прямым результатом лексической области видимости и функций как значений?
• this & Object Prototypes: Можете ли вы назвать четыре варианта значения ключевого слова this в зависимости от контекста вызова? Приходилось ли вам путаться в псевдоклассах JS, вместо того чтобы воспользоваться более простым шаблоном проектирования behavior delegation? А слышали ли вы когда-нибудь про объекты, связанные с другими объектами (OLOO)?
• Types & Grammar: Знакомы ли вы со встроенными типами в JS и, что более важно, знаете ли способы корректного и безопасного приведения типов? Насколько уверенно вы разбираетесь в нюансах грамматики и синтаксиса этого языка?
• Async & Performance: Вы все еще используете обратные вызовы для управления асинхронными действиями? А можете ли вы объяснить, что такое объект promise и как он позволяет избежать ситуации, когда каждая фоновая операция возвращает свой результат (или ошибку) в обратном вызове? Знаете ли вы, как с помощью генераторов улучшить читабельность асинхронного кода? Наконец, известно ли вам, что представляет собой полноценная оптимизация JS-программ и отдельных операций?
Если вы уже прочитали все эти книги и освоили рассматриваемые там темы, значит, пришло время погрузиться в эволюцию языка JS и исследовать перемены, которые ждут нас как в ближайшее время, так и в отдаленной перспективе.
В отличие от предыдущего стандарта, ES6 нельзя назвать еще одним скромным набором добавленных к языку API. Он принес с собой множество новых синтаксических форм, и к некоторым из них, вполне возможно, будет не так-то просто привыкнуть. Появились также новые структуры и новые вспомогательные модули API для различных типов данных.
ES6 — это шаг далеко вперед. Даже если вы считаете, что хорошо знаете JS стандарта ES5, вы столкнетесь с множеством незнакомых вещей, так что будьте готовы! В книге рассмотрены все основные нововведения ES6, без которых невозможно войти в курс дела, а также дан краткий обзор планируемых функций — о них имеет смысл знать уже сейчас.
Поддержка версий
Стандарт JavaScript официально называется ECMAScript (или сокращенно ES), и до недавнего времени все его версии обозначались только целыми числами. ES1 и ES2 не получили известности и массовой реализации. Первой широко распространившейся основой для JavaScript стал ES3 — стандарт этого языка для браузеров Internet Explorer с 6-й по 8-ю версию и для мобильных браузеров Android 2.x. По политическим причинам, о которых я умолчу, злополучная версия ES4 так и не увидела света.В 2009 году был официально завершен ES5 (ES5.1 появился в 2011-м), получивший распространение в качестве стандарта для множества современных браузеров, таких как Firefox, Chrome, Opera, Safari и др.
Следующая версия JS (появление которой было перенесено с 2013-го сначала на 2014-й, а затем на 2015 год) в обсуждениях фигурировала под очевидным именем ES6. Но позднее стали поступать предложения перейти к схеме именования, основанной на годе выхода очередной версии, например ES2016 (она же ES7), которая будет закончена до конца 2016 года. Согласны с таким подходом далеко не все, но есть вероятность, что стандарт ES6 станет известен пользователям под названием ES2015. А появление версии ES2016 станет свидетельством окончательного перехода на новую схему именования.
Кроме того, было отмечено, что скорость эволюции JS превышает одну версию в год. Как только в обсуждениях стандарта возникает новая идея, разработчики браузеров предлагают прототипы нового функционала, а программисты-первопроходцы принимаются экспериментировать с кодом.
Обычно задолго до официального одобрения новый функционал становится стандартом де-факто благодаря ранним прототипам движка и инструментария. Соответственно, имеет смысл рассматривать будущие версии JS как связанные с появлением нового функционала, а не с произвольным набором основных особенностей (как делается сейчас) или с годом (как планируется).
В этом случае номер версии перестает иметь ту важность, которой обладал раньше, а JavaScript превращается в живой, постоянно меняющийся стандарт. И лучше не говорить о коде как о «написанном в соответствии с таким-то стандартом», а рассматривать его в зависимости от поддерживаемых функциональных особенностейподдерживаемых функциональных особенностей.
Транскомпиляция
Быстрая эволюция функционала ставит серьезную проблему перед разработчиками, желающими использовать новые возможности в ситуации, когда их сайты или приложения работают в более старых браузерах, не поддерживающих нововведения.Подобные многолетние промедления повсеместно считаются вредными для будущего экосистемы JS. Люди, занимающиеся развитием языка, мечтают, чтобы разработчики начинали создавать код с учетом новых функциональных особенностей и шаблонов, сразу же после того, как будет утверждена спецификация, и браузеры смогут все это реализовывать.
Как же разрешить противоречие? Здесь на помощь приходят специальные инструменты, в частности техника транскомпиляции2. Грубо говоря, вы посредством специального инструмента преобразуете код ES6 в эквивалент (или нечто близкое к таковому), работающий в окружениях ES5.
В качестве примера возьмем сокращенные определения свойства (см. раздел «Расширения объектных литералов» в главе 2). Вот как это делается в ES6:
Такое небольшое, но удобное преобразование позволяет в случае одинаковых имен сократить объявление объектного литерала foo: foo до foo. Действия транскомпилятора в этом случае представляют собой встроенный рабочий процесс, аналогичный линтингу, минификации и другим подобным операциям.
Библиотеки Shim (полизаполнения)
Далеко не всем новым функциональным особенностям ES6 требуется транскомпилятор. Полизаполнения (polyfills), которые также называют библиотеками Shim, представляют собой шаблоны для определения поведений из новой среды для более старых сред. В синтаксисе полизаполнения недопустимы, но для различных API их вполне можно использовать.Давайте рассмотрим новый метод Object.is(..), предназначенный для проверки строгой эквивалентности двух значений, но без подробных исключений, которые есть у оператора === для значений NaN и -0. Полизаполнение для метода Object.is(..) создается очень просто:
Есть замечательная коллекция ES6 Shim, которую стоит включать во все новые JS-проекты.
Предполагается, что JS ждет непрерывное развитие и что поддержка в браузерах новых функций будет реализовываться постепенно по мере их появления, а не большими фрагментами. Так что самая лучшая стратегия сохранения актуальности — это добавление в базу кода полизаполнений, включение транскомпиляции в процесс сборки и постоянная готовность самого разработчика к изменениям.
Те же, кто мыслит консервативно и откладывает использование нового функционала, пока не исчезнут все работающие без него браузеры, всегда будут плестись далеко позади. Их обойдут стороной все инновации, позволяющие сделать написание кода на JavaScript более результативным, рациональным и надежным.
Подводим итоги
На момент написания книги стандарт ES6 только появился, поэтому вам предстоит многому научиться. Однако куда важнее перестроить свое мировоззрение в соответствии с новым вариантом развития языка JavaScript. Обыкновение годами ждать официальных документов, одобряющих смену стандарта, должно остаться в прошлом.Теперь новые функциональные особенности JavaScript сразу же после своего появления реализуются в браузерах, и только от вас зависит, начнете вы пользоваться ими немедленно или же продолжите действовать неэффективно в попытках запрыгнуть в уходящий поезд. Неважно, какие еще формы примет JavaScript, — теперь это будет происходить быстрее, чем когда-либо в прошлом. Транскомпиляторы и полизаполнения — вот инструменты, которые позволят вам все время оставаться на переднем крае развития языка.
Вы должны принять новую реальность JavaScript, где разработчикам настоятельно рекомендуется перейти от выжидания к активной позиции. А начнется все с изучения ES6
» Более подробно с книгой можно ознакомиться на сайте издательства » Оглавление » Отрывок
Для Хаброжителей скидка 25% по купону — ES6
habr.com
javascript - Что должен знать каждый программист JavaScript?
Изучение языка действительно хорошо и понимание его различных причуд происходит из (лет) опыта. Если вы хотите быть лучшим программистом, я бы сказал, понимая шаблоны дизайна, как и когда их использовать и/или даже когда вы используете их, не осознавая этого; технической архитектуры и пользовательского опыта.
Знание языка (JavaScript) означает, что вы можете выбрать любую инфраструктуру и использовать ее по своему усмотрению. Вам неизбежно придется погрузиться в исходный код, и если все, что вы знаете, является синтаксисом фреймворка или 2 или 3, то вы далеко не уйдете. Говоря, что, попадая в исходный код нескольких разных фреймворков, вероятно, один из лучших способов увидеть, как использовать JavaScript. Прошу прощения, выполнив код в Firebug или Web Inspector, а затем проверив документацию по JavaScript, особенно документы Mozilla и Webkit, чтобы получить более полное представление о том, что вы ищете.
Понимая разницу между объектно-ориентированным и функциональным программированием, JavaScript является сексуальным сочетанием двух, а когда и как использовать оба для создания кодовой базы-убийцы и потрясающих приложений, вы станете лучшим программистом JavaScript.
Просто прочитайте некоторые книги, особенно "хорошие части" Крокфорда, которые просто представляют его мнение о том, что хорошо в JavaScript, в то время как пропуская большинство AWESOME частей JavaScript, вы получите на неправильной ноге.
Проверка кода, написанного кем-то вроде Томаса Фукса, с другой стороны, даст вам гораздо больше информации о способности писать потрясающий и эффективный JavaScript.
Попытка запоминать несколько ошибок или WTF тоже не поможет, вы поймете это, если начнете кодирование и перейдете через код библиотеки/фреймворков, особенно с комментариями, чтобы понять, почему они " ve использовали определенные свойства/значения, а не другие, почему и когда полезно использовать определенные операнды и операторы, все это есть в коде используемой пользователем среды. Как лучше учиться на примере?: ^)
qaru.site