<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="https://davidflanagan.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://davidflanagan.com/" rel="alternate" type="text/html" /><updated>2022-06-18T17:19:29+00:00</updated><id>https://davidflanagan.com/feed.xml</id><title type="html">djf.log()</title><subtitle>David Flanagan on Programming</subtitle><author><name>David Flanagan</name></author><entry><title type="html">JavaScript Features To Forget</title><link href="https://davidflanagan.com/2020/05/12/javascript-to-forget.html" rel="alternate" type="text/html" title="JavaScript Features To Forget" /><published>2020-05-12T00:00:00+00:00</published><updated>2020-05-12T00:00:00+00:00</updated><id>https://davidflanagan.com/2020/05/12/javascript-to-forget</id><content type="html" xml:base="https://davidflanagan.com/2020/05/12/javascript-to-forget.html">&lt;p&gt;The first demo of the language that was to become JavaScript took
place &lt;a href=&quot;https://twitter.com/BrendanEich/status/1259403604626038784&quot;&gt;almost exactly 25 years
ago&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The language was released, as LiveScirpt, in a beta of
Netscape Navigator in the fall of 1995, and renamed to JavaScript
later that year. Sometime late that year I began work on the first
edition (O’Reilly published it as the “beta edition”) of &lt;em&gt;JavaScript:
The Definitive Guide&lt;/em&gt;, and it was published in August of 1996, meaning
that it is going on 24 years old now.&lt;/p&gt;

&lt;p&gt;With the &lt;a href=&quot;https://amzn.to/3dFeqjf&quot;&gt;seventh edition&lt;/a&gt; coming out in just
a few weeks, I want to take a trip down memory lane and blog about
some old weird features of JavaScript and of the early web platform
that we can now, mercifully, forget about.
&lt;!--more--&gt;
One of the reasons that the
new 7th edition is thinner than the 6th edition is that I’ve &lt;a href=&quot;/2020/05/03/changes-in-the-seventh-edition.html&quot;&gt;removed
the reference
section&lt;/a&gt;. But in
addition, I found that there was a lot of stuff that was simply no
longer relevant to web developers in 2020. Web compatibility is
forever (or for at least more than 25 years) so browser vendors may
need to keep supporting old and obscure language and platform features
for a long time to come. But there is no need for the rest of us to
clutter our minds with them anymore.&lt;/p&gt;

&lt;p&gt;So here are some JavaScript and Web platform features that no longer
bulk up the page count of &lt;em&gt;JavaScript: The Definitive Guide&lt;/em&gt;. I’m
happy to say goodbye to them. (I feel myself winding up for a bit of a
rant here, so be warned that this is not carefully researched; just my
memories of how things were in the bad old days):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;arguments&lt;/code&gt; object has been completely obviated by the
introduction of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;...args&lt;/code&gt; in ES6. It was always difficult to explain
the weird way it interacted with named arguments and to always
caution about its performance implications. You may still see it in
legacy code and you may be reminded of its presence if you try to
name a local variable or function parameter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;arguments&lt;/code&gt; in strict
mode, but now that we have rest arguments, it should be allowed to
slink into oblivion.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We used to have to worry about the performance of repeated string
concatenation. There was a period of where we all learned to push
strings onto an array, and then use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;join()&lt;/code&gt; to concatenate
everything at the end. Then JavaScript got fast and we were all
“Well, actually” and unlearned that pattern. And now with template
literals, who even uses string concatenation anymore!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.write()&lt;/code&gt; was pretty much the main feature of JavaScript
at the very beginning, before the DOM. (If you did not use
JavaScript in the 20th century, you may not know that there was a
time before the DOM, but it is true. There was a property you could
set to change the background color of a web page, but no way to
actually alter the document tree once the document had been
parsed.) IIRC you could even insert scripts into a document with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.write()&lt;/code&gt;, but you had to be careful to break the closing
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;/script&amp;gt;&lt;/code&gt; tag into two strings so that the HTML parser wouldn’t
interpret it as the end of the currently-running script.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;HTML didn’t have an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; in the early days, but there was
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;frameset&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;frame&amp;gt;&lt;/code&gt;. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window.frames&lt;/code&gt; property was an
array of the nested window objects that represented the frames in a
document. It was possible to actually call the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open()&lt;/code&gt; method of a
document in a frame, and then use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.write()&lt;/code&gt; to dynamically
generate an entire document inside that frame. That was kind of
cool, actually. Because frames could be nested inside other frames,
every Window object had a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;frames&lt;/code&gt; array that contained its children
frames, and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parent&lt;/code&gt; property that referred to the containing
window, and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;top&lt;/code&gt; property that referred to the toplevel
window. Earlier editions of my book dedicated long sections and
complicated figures to explaining all of this.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;There are all kinds of obsolete techniques for referring to
particular elements within a document. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;frames&lt;/code&gt; array was one,
but, IIRC, there were also &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;links&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;images&lt;/code&gt; arrays as well that
were literally just a list of all the links and images in a
document. IE (version 4, I think) went all-in and introduced
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.all&lt;/code&gt;: an array of all elements in the document. (This was
the beginning of the DOM and of “DHTML”—kind of like the first fish
that crawled onto dry land.) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.all&lt;/code&gt; had all kinds of weird
features: it was an array that also had methods for looking up
elements by name or something like that. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.all&lt;/code&gt; was never
standardized, but even the standard methods like
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.getElementById()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.getElementsByName()&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.getElementsByTagName()&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.getElementsByClassName()&lt;/code&gt; seem obsolete today, crushed
into irrelevance by jQuery’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$()&lt;/code&gt; function and the standard
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.querySelector()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.querySelectorAll()&lt;/code&gt; methods
that it inspired. Through the power of CSS selectors those two
functions obsolete everything that came before.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The thing I hated most about Internet Explorer was that it used an
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;attachEvent()&lt;/code&gt; method for registering event handlers. In my memory,
they did this even though the standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addEventListener()&lt;/code&gt; had
already been defined, and that really annoyed me. Events and event
handling were one of the biggest sources of incompatibility on the
web, and for years JavaScript programmers (and JavaScript book
authors) had to deal with a lengthy list of differences between the
IE event model and the standard event model. Event handling code
had to be written twice: once for IE and once for Firefox. Book
chapters about events were twice as long as they needed to be
because there were two similar, but completely incompatible ways of
dealing with them. One of the major features of jQuery was that it
implemented its own event compatibility layer so you only had to
know about jQuery events, and I suspect that this was an important
reason for its popularity.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The original DOM API was defined during the era of magical thinking
about XML. (People really seemed to believe for a couple of years
that XML was going to solve all data problems. It was a strange
time.) Somehow the W3C committed that defined the DOM API got
infiltrated by Java people who felt it was appropriate to define a
single API to be used by JavaScript programmers working with HTML
documents and Java programmers working with XML data. That’s why we
have weird things like Attr nodes (which are best ignored). One of
the things that always bugged me about the DOM Level 3 API was that
to remove an element &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e&lt;/code&gt; from the document, you couldn’t just write
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e.remove()&lt;/code&gt; as we would today. You actually had to write
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e.parentNode.removeChild(e)&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, it is 2020 now and I promise that &lt;a href=&quot;https://amzn.to/3dFeqjf&quot;&gt;the new 7th edition of my
book&lt;/a&gt; will not subject you to lengthy
explanations of any of those old features that are best left
forgotten.&lt;/p&gt;</content><author><name>David Flanagan</name></author><summary type="html">The first demo of the language that was to become JavaScript took place almost exactly 25 years ago. The language was released, as LiveScirpt, in a beta of Netscape Navigator in the fall of 1995, and renamed to JavaScript later that year. Sometime late that year I began work on the first edition (O’Reilly published it as the “beta edition”) of JavaScript: The Definitive Guide, and it was published in August of 1996, meaning that it is going on 24 years old now. With the seventh edition coming out in just a few weeks, I want to take a trip down memory lane and blog about some old weird features of JavaScript and of the early web platform that we can now, mercifully, forget about.</summary></entry><entry><title type="html">Changes in the Seventh Edition of JavaScript: The Definitive Guide</title><link href="https://davidflanagan.com/2020/05/03/changes-in-the-seventh-edition.html" rel="alternate" type="text/html" title="Changes in the Seventh Edition of JavaScript: The Definitive Guide" /><published>2020-05-03T00:00:00+00:00</published><updated>2020-05-03T00:00:00+00:00</updated><id>https://davidflanagan.com/2020/05/03/changes-in-the-seventh-edition</id><content type="html" xml:base="https://davidflanagan.com/2020/05/03/changes-in-the-seventh-edition.html">&lt;p&gt;The seventh edition of my book, &lt;em&gt;JavaScript: The Definitive Guide&lt;/em&gt; is
scheduled for release less than a month from today. If you own the
sixth edition, it is very much time for an upgrade. This post explains
what has changed in this new edition.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Most importantly, this edition is up-to-date and covers the very
newest ES2020 features like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;?.&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;??&lt;/code&gt;. The sixth edition covered
ES5, which means that I have added documentation of all the language
features of ES6, ES2016, ES2017, ES2018, ES2019 and ES2020 for this
update.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The first thing you’ll notice when you see the new edition
&lt;!--more--&gt; is that O’Reilly has &lt;a href=&quot;/2020/04/27/jstdg7-cover-image.html&quot;&gt;changed the
cover&lt;/a&gt;. The old cover style
still seems iconic to me, but this new style does seem like a nice
modernization of the O’Reilly brand.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The second thing you’ll notice when you pick the book up is that it
is significantly thinner. The 6th edition was a 1096 page brick; the
7th edition is about 400 pages slimmer: still a substantial book,
but not absurdly so. The main reason for this reduced page count is
that I’ve removed the reference section. In 2020 it is faster to
look reference information up on
&lt;a href=&quot;https://developer.mozilla.org&quot;&gt;MDN&lt;/a&gt; than it is to flip through a
printed book. It simply doesn’t make sense to include that material
in this new edition.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The cover of the 6th edition includes the tagline &lt;em&gt;Activate Your Web
Pages&lt;/em&gt;. I don’t remember when that was added, but it feels very
dated (like, “DHTML”-level dated) to me. For the 7th edition I asked
O’Reilly to change this to &lt;em&gt;Master the World’s Most-Used Programming
Language&lt;/em&gt; and the new cover positions this as a subtitle. (The
“most-used” claim is from the &lt;a href=&quot;https://insights.stackoverflow.com/survey/2019#technology&quot;&gt;2019 Stack Overflow developer
survey&lt;/a&gt;
which found “For the seventh year in a row, JavaScript is the most
commonly used programming language”.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“Master the world’s most-used programming language” isn’t just
marketing copy for the cover, though. It reflects a real change in
focus for the book. The web platform has become way too large to be
documented &lt;em&gt;definitively&lt;/em&gt; by any one book. And, with the rise of
Node, JavaScript isn’t just the language of web browsers anymore. So
starting with this seventh edition I will be documenting the
JavaScript language definitively, and providing an in-depth (but not
definitive) introduction to the use of that language with Web APIs
and Node APIs.&lt;/p&gt;

    &lt;p&gt;The 6th edition devoted about 290 pages to the language itself, 410
pages to the Web platform, and a meager 10 pages to Node. The 7th
edition has 400 pages on the language, 160 pages on the Web, 60
pages on Node, and 30 pages on the JavaScript ecosystem of tools and
language extensions. The cuts to the web documentation are not as
deep as they seem, however. Much of the reduction in page count was
achieved by removing material that is no longer relevant in 2020,
such as coverage of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;document.write()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;attachEvent()&lt;/code&gt;, and
pretty much all mentions of Internet Explorer. There was a lot of
material on CSS that I’ve removed, and the entire chapter on jQuery
is gone (it is still available as &lt;a href=&quot;https://amzn.to/2Yvae17&quot;&gt;a pocket
reference&lt;/a&gt; though).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The 7th edition has a number of rewritten and new chapters:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 6, &lt;em&gt;Objects&lt;/em&gt;, and Chapter 8, &lt;em&gt;Functions&lt;/em&gt;, are not
completely rewritten but they include a lot of new material
covering all the ES6 extensions to object literal syntax, arrow
functions, parameter defaults, rest parameters, the spread
operator, and so on.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 9, &lt;em&gt;Classes&lt;/em&gt;, is entirely rewritten. The chapter begins
the old fashioned way: it demonstrates how to create a JavaScript
class by directly defining methods on the prototype object.  I
believe that it is still important to understand how classes
actually work in JavaScript. But after some initial examples of
this technique, the chapter switches to using the modern &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;class&lt;/code&gt;
keyword.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 10, &lt;em&gt;Modules&lt;/em&gt;, is new. When I wrote the 6th edition,
JavaScript had no module system and my discussion of using
immediately-invoked function expressions as modules was simply
tacked on to the end of the classes chapters. This new chapter
documents both the module system used by Node and the ES6-standard
modules that are now (finally!) supported by all browsers.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 11, &lt;em&gt;The JavaScript Standard Library&lt;/em&gt;, is a new chapter
that covers maps, sets, typed arrays, dates, errors, JSON, and
internationalization. The existing chapter on regular expressions
from the 6th edition has been updated and turned into a (long)
section of this chapter. This chapter also covers three APIs that
are not formally part of the JavaScript language, but that are
implemented by browsers and by Node: the console API, the URL
class, and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setTimeout()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setInterval()&lt;/code&gt; functions.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 12, &lt;em&gt;Iterators and Generators&lt;/em&gt; is new, and documents
exactly what the title says. This chapter teaches you how to use
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Symbol.iterator&lt;/code&gt; to make your own classes iterable so that they
work with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for/of&lt;/code&gt; loop. And it also explains generator
(defined with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;function*&lt;/code&gt;) and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yield&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yield*&lt;/code&gt; keywords.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 13, &lt;em&gt;Asynchronous JavaScript&lt;/em&gt; is a detailed discussion of
asynchronous APIs and explains how to use events, callbacks,
Promises, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;await&lt;/code&gt;. Promises are a revolutionary
addition to JavaScript, but using them correctly can be hard
unless you understand them thoroughly. This chapter goes deep in
an attempt to definitively explain Promises.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 14, &lt;em&gt;Metaprogramming&lt;/em&gt; is a grab-bag of advanced language
features that may be of primary interest to those writing
libraries for use by other programmers. It explains property
descriptors, object extensibility, template tag functions, proxy
objects, the Reflect API and well-known symbols.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 15, &lt;em&gt;JavaScript in Web Browsers&lt;/em&gt; is by far the longest
chapter in the book, introducing the Web platform in 160 pages. It
includes the content from the 6th edition that is still relevant,
plus new material covering web components, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch()&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;history.pushState()&lt;/code&gt; and more. This chapter concludes with an
extended example that implements a multi-threaded Mandelbrot set
viewer app. The example demonstrates web workers (and includes a
Promise-based WorkerPool utility class), inter-thread
communication with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;postMessage()&lt;/code&gt;, the transfer (without copying)
of array buffers between threads, history management with
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pushState()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;popstate()&lt;/code&gt;, keyboard and pointer events,
scripted CSS transforms, the URL() class, and generators.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 16, &lt;em&gt;Server-Side JavaScript with Node&lt;/em&gt;, is a detailed
introduction to Node that starts with the fundamentals: events,
buffers, and streams. This is followed by practical sections on
working with files, making HTTP requests, serving HTTP
responses, and concurrent programming with threads and child
processes.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Chapter 17, JavaScript Tools and Extensions, concludes the book
with an introduction to some important parts of the JavaScript
ecosystem: eslint, prettier, Jest, npm, code bundlers, Babel, JSX
and Flow. I couldn’t document everything, so this chapter is a
curated—but not particularly opinionated—list of some of the most
popular JavaScript tools and extensions. This chapter is intended
not as a recommendation for particular tools and technologies, but
as an exhibition of the kinds of tools that professional
JavaScript programmers regularly use.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a really good book! You can &lt;a href=&quot;https://amzn.to/2yn1VK8&quot;&gt;order it here&lt;/a&gt;.&lt;/p&gt;</content><author><name>David Flanagan</name></author><summary type="html">The seventh edition of my book, JavaScript: The Definitive Guide is scheduled for release less than a month from today. If you own the sixth edition, it is very much time for an upgrade. This post explains what has changed in this new edition. Most importantly, this edition is up-to-date and covers the very newest ES2020 features like ?. and ??. The sixth edition covered ES5, which means that I have added documentation of all the language features of ES6, ES2016, ES2017, ES2018, ES2019 and ES2020 for this update. The first thing you’ll notice when you see the new edition</summary></entry><entry><title type="html">Back Cover Copy for JSTDG7</title><link href="https://davidflanagan.com/2020/04/27/back-cover-copy.html" rel="alternate" type="text/html" title="Back Cover Copy for JSTDG7" /><published>2020-04-27T23:00:00+00:00</published><updated>2020-04-27T23:00:00+00:00</updated><id>https://davidflanagan.com/2020/04/27/back-cover-copy</id><content type="html" xml:base="https://davidflanagan.com/2020/04/27/back-cover-copy.html">&lt;p&gt;Here’s the marketing copy I wrote for the back cover of the book:&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;JavaScript is the programming language of the web and is used by more
software developers today than any other programming language. For
nearly 25 years this best seller has been the go-to guide for
JavaScript programmers. The seventh edition is fully updated to cover
the 2020 version of JavaScript, and new chapters cover classes,
modules, iterators, generators, Promises, async/await, and
metaprogramming. You’ll find illuminating and engaging example code
throughout.
&lt;!--more--&gt;
This book is for programmers who want to learn JavaScript and for web
developers who want to take their understanding and mastery to the
next level. It begins by explaining the JavaScript language itself, in
detail, from the bottom up. It then builds on that foundation to cover
the web platform and Node.js.&lt;/p&gt;

&lt;p&gt;Topics include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Types, values, variables, expressions, operators, statements,
objects, and arrays&lt;/li&gt;
  &lt;li&gt;Functions, classes, modules, iterators, generators, Promises, and
async/await&lt;/li&gt;
  &lt;li&gt;JavaScript’s standard library: data structures, regular expressions,
JSON, i18n, etc.&lt;/li&gt;
  &lt;li&gt;The web platform: documents, components, graphics, networking,
storage, and threads&lt;/li&gt;
  &lt;li&gt;Node.js: buffers, files, streams, threads, child processes, web
clients, and web servers&lt;/li&gt;
  &lt;li&gt;Tools and language extensions that professional JavaScript
developers rely on&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;I’ll have lots more to say (not marketing copy) about the new book
future post. Meanwhile, though, I want to drop this screenshot from
Amazon’s US site:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2020-04-27-number-1-new-release.png&quot; alt=&quot;#1 new release in Computer Programming Languages&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Thank you to everyone who has pre-ordered my book and has made that
image possible.&lt;/p&gt;

&lt;p&gt;The weeks leading up to a book’s publication are a particularly
important time for pre-orders because it generates publicity and helps
the publisher know what size print run to schedule.&lt;/p&gt;

&lt;p&gt;So if you already know that you want to own the new edition of this
book, now would be &lt;a href=&quot;https://amzn.to/2xd5qCn&quot;&gt;a great time to order it&lt;/a&gt;.&lt;/p&gt;</content><author><name>David Flanagan</name></author><summary type="html">Here’s the marketing copy I wrote for the back cover of the book: JavaScript is the programming language of the web and is used by more software developers today than any other programming language. For nearly 25 years this best seller has been the go-to guide for JavaScript programmers. The seventh edition is fully updated to cover the 2020 version of JavaScript, and new chapters cover classes, modules, iterators, generators, Promises, async/await, and metaprogramming. You’ll find illuminating and engaging example code throughout.</summary></entry><entry><title type="html">JSTDG7 Cover Image</title><link href="https://davidflanagan.com/2020/04/27/jstdg7-cover-image.html" rel="alternate" type="text/html" title="JSTDG7 Cover Image" /><published>2020-04-27T00:00:00+00:00</published><updated>2020-04-27T00:00:00+00:00</updated><id>https://davidflanagan.com/2020/04/27/jstdg7-cover-image</id><content type="html" xml:base="https://davidflanagan.com/2020/04/27/jstdg7-cover-image.html">&lt;p&gt;I’ve started a new blog to celebrate the fact that after 9 years there
will finally be a new seventh edition of &lt;em&gt;JavaScript: The Definitive Guide&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/jstdg7.jpeg&quot; alt=&quot;The cover of my book&quot; /&gt;
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;That is the same rhino that has been on the cover of all previous
editions. But it looks grumpier to me with this new all-white cover
style that O’Reilly has switched to.&lt;/p&gt;

&lt;p&gt;The early release version &lt;a href=&quot;http://shop.oreilly.com/product/0636920048633.do&quot;&gt;is available online from the
publisher&lt;/a&gt; today,
and the &lt;a href=&quot;https://amzn.to/2KA44Vz&quot;&gt;print version&lt;/a&gt; should start shipping
in early June.&lt;/p&gt;</content><author><name>David Flanagan</name></author><category term="jstdg7" /><summary type="html">I’ve started a new blog to celebrate the fact that after 9 years there will finally be a new seventh edition of JavaScript: The Definitive Guide!</summary></entry></feed>