+353-1-416-8900REST OF WORLD
+44-20-3973-8888REST OF WORLD
1-917-300-0470EAST COAST U.S
1-800-526-8630U.S. (TOLL FREE)

JavaScript. The New Toys. Edition No. 1

  • Book

  • 608 Pages
  • August 2020
  • John Wiley and Sons Ltd
  • ID: 5837874

All of JavaScript's newest features, in depth, made easy to understand.

JavaScript is a rapidly changing language and it can be challenging to keep up with all the new toys being added. JavaScript: The New Toys explores the newest features of the world's most popular programming language while also showing readers how to track what's coming next. After setting the stage by covering who manages the process of improving JavaScript, how new features get introduced, terminology, and a high-level overview of new features, it details each new or updated item in depth, with example uses, possible pitfalls, and expert recommendations for updating old habits in light of new features.  JavaScript: The New Toys:

  • Covers all the additions to JavaScript in ES2015-ES2020 plus a preview of what's coming next
  • Explores the latest syntax: nullish coalescing, optional chaining, let and const, class syntax, private methods, private fields, new.target, numeric separators, BigInt, destructuring, default parameters, arrow functions, async functions, await, generator functions, ... (rest and spread), template literals, binary and octal literals, ** (exponentiation), computed property/method names, for-of, for-await-of, shorthand properties, and others
  • Details the new features and patterns including modules, promises, iteration, generators, Symbol, Proxy, reflection, typed arrays, Atomics, shared memory, WeakMap, WeakSet, and more
  • Highlights common pitfalls and explains how to avoid them
  • Shows how to follow the improvements process and even participate in the process yourself
  • Explains how to use new features even before they're widely supported

With its comprehensive coverage and friendly, accessible style, JavaScript: The New Toys provides an invaluable resource for programmers everywhere, whether they work in web development, Node.js, Electron, Windows Universal Apps, or another JavaScript environment.

Table of Contents

Introduction xxxi

Chapter 1: The New Toys In ES2015-ES2020, and Beyond 1

Definitions, Who’s Who, and Terminology 2

What are the “New Toys”? 4

How Do New Toys Get Created? 6

Keeping Up with the New Toys 9

Using Today’s Toys in Yesterday’s Environments, and Tomorrow’s Toys Today 10

Review 15

Chapter 2: Block-Scoped Declarations: Let and Const 17

An Introduction to let and const 18

True Block Scope 18

Repeated Declarations are an Error 19

Hoisting and the Temporal Dead Zone 20

A New Kind of Global 22

const: Constants for JavaScript 24

Block Scope in Loops 26

Old Habits to New 36

Chapter 3: New Function Features 39

Arrow Functions and Lexical this, super, etc. 40

Default Parameter Values 45

 “Rest” Parameters 50

Trailing Commas in Parameter Lists and Function Calls 52

The Function name Property 53

Function Declarations in Blocks 55

Function Declarations in Blocks: Standard Semantics 57

Old Habits to New 60

Chapter 4: Classes 65

What is a Class? 66

Introducing the New class Syntax 66

Comparing with the Older Syntax 75

Creating Subclasses 77

Leaving Off Object.prototype 97

new.target 98

class Declarations vs. class Expressions 101

More to Come 103

Old Habits to New 104

Chapter 5: New Object Features 105

Computed Property Names 106

Shorthand Properties 107

Getting and Setting an Object’s Prototype 107

Method Syntax, and super Outside Classes 109

Symbol 112

New Object Functions 120

Symbol.toPrimitive 123

Property Order 125

Property Spread Syntax 127

Old Habits to New 128

Chapter 6: Iterables, Iterators, For-Of, Iterable Spread, Generators 131

Iterators, Iterables, the for-of Loop, and Iterable Spread Syntax 131

Generator Functions 146

Old Habits to New 163

Chapter 7: Destructuring 165

Overview 165

Basic Object Destructuring 166

Basic Array (and Iterable) Destructuring 169

Defaults 170

Rest Syntax in Destructuring Patterns 172

Using Different Names 173

Computed Property Names 174

Nested Destructuring 174

Parameter Destructuring 175

Destructuring in Loops 178

Old Habits to New 179

Chapter 8: Promises 181

Why Promises? 182

Promise Fundamentals 182

Using an Existing Promise 186

Adding Handlers to Already Settled Promises 201

Creating Promises 202

Other Promise Utility Methods 207

Promise Patterns 210

Handle Errors or Return the Promise 210

Promises in Series 211

Promises in Parallel 213

Promise Subclasses 218

Old Habits to New 219

Chapter 9: Asynchronous Functions, Iterators, and Generators 221

async Functions 222

async Iterators, Iterables, and Generators 232

for-await-of 238

Old Habits to New 238

Chapter 10: Templates, Tag Functions, and New String Features 241

Template Literals 241

Improved Unicode Support 250

Iteration 255

New String Methods 256

Updates to the match, split, search, and replace Methods 259

Old Habits to New 260

Chapter 11: New Array Features, Typed Arrays 263

New Array Methods 264

Iteration, Spread, Destructuring 276

Stable Array Sort 276

Typed Arrays 277

Old Habits to New 292

Chapter 12: Maps and Sets 293

Maps 293

Sets 300

WeakMaps 304

WeakSets 314

Old Habits to New 316

Chapter 13: Modules 319

Introduction to Modules 319

Module Fundamentals 320

Renaming Exports 331

Re-Exporting Exports from Another Module 332

Renaming Imports 333

Importing a Module’s Namespace Object 333

Exporting Another Module’s Namespace Object 334

Importing a Module Just for Side Effects 335

Import and Export Entries 335

Imports are Live and Read-Only 338

Module Instances are Realm-Specific 340

How Modules are Loaded 341

Import/Export Syntax Review 348

Dynamic Import 350

Tree Shaking 357

Bundling 359

Import Metadata 360

Worker Modules 360

Old Habits to New 362

Chapter 14: Reflection - Reflect and Proxy 365

Reflect 365

Proxy 371

Old Habits to New 395

Chapter 15: Regular Expression Updates 397

The Flags Property 398

New Flags 398

Named Capture Groups 400

Lookbehind Assertions 405

Unicode Features 408

Old Habits to New 413

Chapter 16: Shared Memory 417

Introduction 417

Here There Be Dragons! 418

Browser Support 418

Shared Memory Basics 420

Memory is Shared, Not Objects 426

Race Conditions, Out-of-Order Stores, Stale Values, Tearing, and More 427

The Atomics Object 429

Shared Memory Example 434

Here There Be Dragons! (Again) 455

Old Habits to New 460

Chapter 17: Miscellany 461

BigInt 462

New Integer Literals 465

New Math Methods 467

Exponentiation Operator (**) 468

Date.prototype.toString Change 470

Function.prototype.toString Change 471

Number Additions 471

Symbol.isConcatSpreadable 474

Various Syntax Tweaks 475

Various Standard Library / Global Additions 479

Annex B: Browser-Only Features 482

Tail Call Optimization 488

Old Habits to New 491

Chapter 18: Upcoming Class Features 493

Public and Private Class Fields, Methods, and Accessors 493

Old Habits to New 514

Chapter 19: A Look Ahead . . .517

Top-Level await 518

WeakRefs and Cleanup Callbacks 525

RegExp Match Indices 533

String.prototype.replaceAll 535

Atomics asyncWait 535

Various Syntax Tweaks 536

Legacy Deprecated RegExp Features 537

Thank You for Reading! 538

Appendix: Fantastic Features and Where to Find Them 539

Index 557

Authors

T. J. Crowder Farsight Software.