JavaScript & TypeScript
Javascript: The Definitive Guide: Master the World's Most-Used Programming Language
David Flanagan, 2020
Inhaltsverzeichnis des Buches
- Preface
- Conventions Used in This Book
- Example Code
- O’Reilly Online Learning
- How to Contact Us
- Acknowledgments
- Introduction to JavaScript
- 1.1 Exploring JavaScript
- 1.2 Hello World
- 1.3 A Tour of JavaScript
- 1.4 Example: Character Frequency Histograms
- 1.5 Summary
- Lexical Structure
- 2.1 The Text of a JavaScript Program
- 2.2 Comments
- 2.3 Literals
- 2.4 Identifiers and Reserved Words
- 2.4.1 Reserved Words
- 2.5 Unicode
- 2.5.1 Unicode Escape Sequences
- 2.5.2 Unicode Normalization
- 2.6 Optional Semicolons
- 2.7 Summary
- Types, Values, and Variables
- 3.1 Overview and Definitions
- 3.2 Numbers
- 3.2.1 Integer Literals
- 3.2.2 Floating-Point Literals
- 3.2.3 Arithmetic in JavaScript
- 3.2.4 Binary Floating-Point and Rounding Errors
- 3.2.5 Arbitrary Precision Integers with BigInt
- 3.2.6 Dates and Times
- 3.3 Text
- 3.3.1 String Literals
- 3.3.2 Escape Sequences in String Literals
- 3.3.3 Working with Strings
- 3.3.4 Template Literals
- 3.3.5 Pattern Matching
- 3.4 Boolean Values
- 3.5 null and undefined
- 3.6 Symbols
- 3.7 The Global Object
- 3.8 Immutable Primitive Values and Mutable Object References
- 3.9 Type Conversions
- 3.9.1 Conversions and Equality
- 3.9.2 Explicit Conversions
- 3.9.3 Object to Primitive Conversions
- 3.10 Variable Declaration and Assignment
- 3.10.1 Declarations with let and const
- 3.10.2 Variable Declarations with var
- 3.10.3 Destructuring Assignment
- 3.11 Summary
- Expressions and Operators
- 4.1 Primary Expressions
- 4.2 Object and Array Initializers
- 4.3 Function Definition Expressions
- 4.4 Property Access Expressions
- 4.4.1 Conditional Property Access
- 4.5 Invocation Expressions
- 4.5.1 Conditional Invocation
- 4.6 Object Creation Expressions
- 4.7 Operator Overview
- 4.7.1 Number of Operands
- 4.7.2 Operand and Result Type
- 4.7.3 Operator Side Effects
- 4.7.4 Operator Precedence
- 4.7.5 Operator Associativity
- 4.7.6 Order of Evaluation
- 4.8 Arithmetic Expressions
- 4.8.1 The + Operator
- 4.8.2 Unary Arithmetic Operators
- 4.8.3 Bitwise Operators
- 4.9 Relational Expressions
- 4.9.1 Equality and Inequality Operators
- 4.9.2 Comparison Operators
- 4.9.3 The in Operator
- 4.9.4 The instanceof Operator
- 4.10 Logical Expressions
- 4.10.1 Logical AND (&&)
- 4.10.2 Logical OR (||)
- 4.10.3 Logical NOT (!)
- 4.11 Assignment Expressions
- 4.11.1 Assignment with Operation
- 4.12 Evaluation Expressions
- 4.12.1 eval()
- 4.12.2 Global eval()
- 4.12.3 Strict eval()
- 4.13 Miscellaneous Operators
- 4.13.1 The Conditional Operator (?:)
- 4.13.2 First-Defined (??)
- 4.13.3 The typeof Operator
- 4.13.4 The delete Operator
- 4.13.5 The await Operator
- 4.13.6 The void Operator
- 4.13.7 The comma Operator (,)
- 4.14 Summary
- Statements
- 5.1 Expression Statements
- 5.2 Compound and Empty Statements
- 5.3 Conditionals
- 5.3.1 if
- 5.3.2 else if
- 5.3.3 switch
- 5.4 Loops
- 5.4.1 while
- 5.4.2 do/while
- 5.4.3 for
- 5.4.4 for/of
- 5.4.5 for/in
- 5.5 Jumps
- 5.5.1 Labeled Statements
- 5.5.2 break
- 5.5.3 continue
- 5.5.4 return
- 5.5.5 yield
- 5.5.6 throw
- 5.5.7 try/catch/finally
- 5.6 Miscellaneous Statements
- 5.6.1 with
- 5.6.2 debugger
- 5.6.3 “use strict”
- 5.7 Declarations
- 5.7.1 const, let, and var
- 5.7.2 function
- 5.7.3 class
- 5.7.4 import and export
- 5.8 Summary of JavaScript Statements
- Objects
- 6.1 Introduction to Objects
- 6.2 Creating Objects
- 6.2.1 Object Literals
- 6.2.2 Creating Objects with new
- 6.2.3 Prototypes
- 6.2.4 Object.create()
- 6.3 Querying and Setting Properties
- 6.3.1 Objects As Associative Arrays
- 6.3.2 Inheritance
- 6.3.3 Property Access Errors
- 6.4 Deleting Properties
- 6.5 Testing Properties
- 6.6 Enumerating Properties
- 6.6.1 Property Enumeration Order
- 6.7 Extending Objects
- 6.8 Serializing Objects
- 6.9 Object Methods
- 6.9.1 The toString() Method
- 6.9.2 The toLocaleString() Method
- 6.9.3 The valueOf() Method
- 6.9.4 The toJSON() Method
- 6.10 Extended Object Literal Syntax
- 6.10.1 Shorthand Properties
- 6.10.2 Computed Property Names
- 6.10.3 Symbols as Property Names
- 6.10.4 Spread Operator
- 6.10.5 Shorthand Methods
- 6.10.6 Property Getters and Setters
- 6.11 Summary
- Arrays
- 7.1 Creating Arrays
- 7.1.1 Array Literals
- 7.1.2 The Spread Operator
- 7.1.3 The Array() Constructor
- 7.1.4 Array.of()
- 7.1.5 Array.from()
- 7.2 Reading and Writing Array Elements
- 7.3 Sparse Arrays
- 7.4 Array Length
- 7.5 Adding and Deleting Array Elements
- 7.6 Iterating Arrays
- 7.7 Multidimensional Arrays
- 7.8 Array Methods
- 7.8.1 Array Iterator Methods
- 7.8.2 Flattening arrays with flat() and flatMap()
- 7.8.3 Adding arrays with concat()
- 7.8.4 Stacks and Queues with push(), pop(), shift(), and unshift()
- 7.8.5 Subarrays with slice(), splice(), fill(), and copyWithin()
- 7.8.6 Array Searching and Sorting Methods
- 7.8.7 Array to String Conversions
- 7.8.8 Static Array Functions
- 7.9 Array-Like Objects
- 7.10 Strings as Arrays
- 7.11 Summary
- Functions
- 8.1 Defining Functions
- 8.1.1 Function Declarations
- 8.1.2 Function Expressions
- 8.1.3 Arrow Functions
- 8.1.4 Nested Functions
- 8.2 Invoking Functions
- 8.2.1 Function Invocation
- 8.2.2 Method Invocation
- 8.2.3 Constructor Invocation
- 8.2.4 Indirect Invocation
- 8.2.5 Implicit Function Invocation
- 8.3 Function Arguments and Parameters
- 8.3.1 Optional Parameters and Defaults
- 8.3.2 Rest Parameters and Variable-Length Argument Lists
- 8.3.3 The Arguments Object
- 8.3.4 The Spread Operator for Function Calls
- 8.3.5 Destructuring Function Arguments into Parameters
- 8.3.6 Argument Types
- 8.4 Functions as Values
- 8.4.1 Defining Your Own Function Properties
- 8.5 Functions as Namespaces
- 8.6 Closures
- 8.7 Function Properties, Methods, and Constructor
- 8.7.1 The length Property
- 8.7.2 The name Property
- 8.7.3 The prototype Property
- 8.7.4 The call() and apply() Methods
- 8.7.5 The bind() Method
- 8.7.6 The toString() Method
- 8.7.7 The Function() Constructor
- 8.8 Functional Programming
- 8.8.1 Processing Arrays with Functions
- 8.8.2 Higher-Order Functions
- 8.8.3 Partial Application of Functions
- 8.8.4 Memoization
- 8.9 Summary
- Classes
- 9.1 Classes and Prototypes
- 9.2 Classes and Constructors
- 9.2.1 Constructors, Class Identity, and instanceof
- 9.2.2 The constructor Property
- 9.3 Classes with the class Keyword
- 9.3.1 Static Methods
- 9.3.2 Getters, Setters, and other Method Forms
- 9.3.3 Public, Private, and Static Fields
- 9.3.4 Example: A Complex Number Class
- 9.4 Adding Methods to Existing Classes
- 9.5 Subclasses
- 9.5.1 Subclasses and Prototypes
- 9.5.2 Subclasses with extends and super
- 9.5.3 Delegation Instead of Inheritance
- 9.5.4 Class Hierarchies and Abstract Classes
- 9.6 Summary
- Modules
- 10.1 Modules with Classes, Objects, and Closures
- 10.1.1 Automating Closure-Based Modularity
- 10.2 Modules in Node
- 10.2.1 Node Exports
- 10.2.2 Node Imports
- 10.2.3 Node-Style Modules on the Web
- 10.3 Modules in ES6
- 10.3.1 ES6 Exports
- 10.3.2 ES6 Imports
- 10.3.3 Imports and Exports with Renaming
- 10.3.4 Re-Exports
- 10.3.5 JavaScript Modules on the Web
- 10.3.6 Dynamic Imports with import()
- 10.3.7 import.meta.url
- 10.4 Summary
- The JavaScript Standard Library
- 11.1 Sets and Maps
- 11.1.1 The Set Class
- 11.1.2 The Map Class
- 11.1.3 WeakMap and WeakSet
- 11.2 Typed Arrays and Binary Data
- 11.2.1 Typed Array Types
- 11.2.2 Creating Typed Arrays
- 11.2.3 Using Typed Arrays
- 11.2.4 Typed Array Methods and Properties
- 11.2.5 DataView and Endianness
- 11.3 Pattern Matching with Regular Expressions
- 11.3.1 Defining Regular Expressions
- 11.3.2 String Methods for Pattern Matching
- 11.3.3 The RegExp Class
- 11.4 Dates and Times
- 11.4.1 Timestamps
- 11.4.2 Date Arithmetic
- 11.4.3 Formatting and Parsing Date Strings
- 11.5 Error Classes
- 11.6 JSON Serialization and Parsing
- 11.6.1 JSON Customizations
- 11.7 The Internationalization API
- 11.7.1 Formatting Numbers
- 11.7.2 Formatting Dates and Times
- 11.7.3 Comparing Strings
- 11.8 The Console API
- 11.8.1 Formatted Output with Console
- 11.9 URL APIs
- 11.9.1 Legacy URL Functions
- 11.10 Timers
- 11.11 Summary
- Iterators and Generators
- 12.1 How Iterators Work
- 12.2 Implementing Iterable Objects
- 12.2.1 “Closing” an Iterator: The Return Method
- 12.3 Generators
- 12.3.1 Generator Examples
- 12.3.2 yield\* and Recursive Generators
- 12.4 Advanced Generator Features
- 12.4.1 The Return Value of a Generator Function
- 12.4.2 The Value of a yield Expression
- 12.4.3 The return() and throw() Methods of a Generator
- 12.4.4 A Final Note About Generators
- 12.5 Summary
- Asynchronous JavaScript
- 13.1 Asynchronous Programming with Callbacks
- 13.1.1 Timers
- 13.1.2 Events
- 13.1.3 Network Events
- 13.1.4 Callbacks and Events in Node
- 13.2 Promises
- 13.2.1 Using Promises
- 13.2.2 Chaining Promises
- 13.2.3 Resolving Promises
- 13.2.4 More on Promises and Errors
- 13.2.5 Promises in Parallel
- 13.2.6 Making Promises
- 13.2.7 Promises in Sequence
- 13.3 async and await
- 13.3.1 await Expressions
- 13.3.2 async Functions
- 13.3.3 Awaiting Multiple Promises
- 13.3.4 Implementation Details
- 13.4 Asynchronous Iteration
- 13.4.1 The for/await Loop
- 13.4.2 Asynchronous Iterators
- 13.4.3 Asynchronous Generators
- 13.4.4 Implementing Asynchronous Iterators
- 13.5 Summary
- Metaprogramming
- 14.1 Property Attributes
- 14.2 Object Extensibility
- 14.3 The prototype Attribute
- 14.4 Well-Known Symbols
- 14.4.1 Symbol.iterator and Symbol.asyncIterator
- 14.4.2 Symbol.hasInstance
- 14.4.3 Symbol.toStringTag
- 14.4.4 Symbol.species
- 14.4.5 Symbol.isConcatSpreadable
- 14.4.6 Pattern-Matching Symbols
- 14.4.7 Symbol.toPrimitive
- 14.4.8 Symbol.unscopables
- 14.5 Template Tags
- 14.6 The Reflect API
- 14.7 Proxy Objects
- 14.7.1 Proxy Invariants
- 14.8 Summary
- JavaScript in Web Browsers
- 15.1 Web Programming Basics
- 15.1.1 JavaScript in HTML <script> Tags
- 15.1.2 The Document Object Model
- 15.1.3 The Global Object in Web Browsers
- 15.1.4 Scripts Share a Namespace
- 15.1.5 Execution of JavaScript Programs
- 15.1.6 Program Input and Output
- 15.1.7 Program Errors
- 15.1.8 The Web Security Model
- 15.2 Events
- 15.2.1 Event Categories
- 15.2.2 Registering Event Handlers
- 15.2.3 Event Handler Invocation
- 15.2.4 Event Propagation
- 15.2.5 Event Cancellation
- 15.2.6 Dispatching Custom Events
- 15.3 Scripting Documents
- 15.3.1 Selecting Document Elements
- 15.3.2 Document Structure and Traversal
- 15.3.3 Attributes
- 15.3.4 Element Content
- 15.3.5 Creating, Inserting, and Deleting Nodes
- 15.3.6 Example: Generating a Table of Contents
- 15.4 Scripting CSS
- 15.4.1 CSS Classes
- 15.4.2 Inline Styles
- 15.4.3 Computed Styles
- 15.4.4 Scripting Stylesheets
- 15.4.5 CSS Animations and Events
- 15.5 Document Geometry and Scrolling
- 15.5.1 Document Coordinates and Viewport Coordinates
- 15.5.2 Querying the Geometry of an Element
- 15.5.3 Determining the Element at a Point
- 15.5.4 Scrolling
- 15.5.5 Viewport Size, Content Size, and Scroll Position
- 15.6 Web Components
- 15.6.1 Using Web Components
- 15.6.2 HTML Templates
- 15.6.3 Custom Elements
- 15.6.4 Shadow DOM
- 15.6.5 Example: a <search-box> Web Component
- 15.7 SVG: Scalable Vector Graphics
- 15.7.1 SVG in HTML
- 15.7.2 Scripting SVG
- 15.7.3 Creating SVG Images with JavaScript
- 15.8 Graphics in a <canvas>
- 15.8.1 Paths and Polygons
- 15.8.2 Canvas Dimensions and Coordinates
- 15.8.3 Graphics Attributes
- 15.8.4 Canvas Drawing Operations
- 15.8.5 Coordinate System Transforms
- 15.8.6 Clipping
- 15.8.7 Pixel Manipulation
- 15.9 Audio APIs
- 15.9.1 The Audio() Constructor
- 15.9.2 The WebAudio API
- 15.10 Location, Navigation, and History
- 15.10.1 Loading New Documents
- 15.10.2 Browsing History
- 15.10.3 History Management with hashchange Events
- 15.10.4 History Management with pushState()
- 15.11 Networking
- 15.11.1 fetch()
- 15.11.2 Server-Sent Events
- 15.11.3 WebSockets
- 15.12 Storage
- 15.12.1 localStorage and sessionStorage
- 15.12.2 Cookies
- 15.12.3 IndexedDB
- 15.13 Worker Threads and Messaging
- 15.13.1 Worker Objects
- 15.13.2 The Global Object in Workers
- 15.13.3 Importing Code into a Worker
- 15.13.4 Worker Execution Model
- 15.13.5 postMessage(), MessagePorts, and MessageChannels
- 15.13.6 Cross-Origin Messaging with postMessage()
- 15.14 Example: The Mandelbrot Set
- 15.15 Summary and Suggestions for Further Reading
- 15.15.1 HTML and CSS
- 15.15.2 Performance
- 15.15.3 Security
- 15.15.4 WebAssembly
- 15.15.5 More Document and Window Features
- 15.15.6 Events
- 15.15.7 Progressive Web Apps and Service Workers
- 15.15.8 Mobile Device APIs
- 15.15.9 Binary APIs
- 15.15.10 Media APIs
- 15.15.11 Cryptography and Related APIs
- Server-Side JavaScript with Node
- 16.1 Node Programming Basics
- 16.1.1 Console Output
- 16.1.2 Command-Line Arguments and Environment Variables
- 16.1.3 Program Life Cycle
- 16.1.4 Node Modules
- 16.1.5 The Node Package Manager
- 16.2 Node Is Asynchronous by Default
- 16.3 Buffers
- 16.4 Events and EventEmitter
- 16.5 Streams
- 16.5.1 Pipes
- 16.5.2 Asynchronous Iteration
- 16.5.3 Writing to Streams and Handling Backpressure
- 16.5.4 Reading Streams with Events
- 16.6 Process, CPU, and Operating System Details
- 16.7 Working with Files
- 16.7.1 Paths, File Descriptors, and FileHandles
- 16.7.2 Reading Files
- 16.7.3 Writing Files
- 16.7.4 File Operations
- 16.7.5 File Metadata
- 16.7.6 Working with Directories
- 16.8 HTTP Clients and Servers
- 16.9 Non-HTTP Network Servers and Clients
- 16.10 Working with Child Processes
- 16.10.1 execSync() and execFileSync()
- 16.10.2 exec() and execFile()
- 16.10.3 spawn()
- 16.10.4 fork()
- 16.11 Worker Threads
- 16.11.1 Creating Workers and Passing Messages
- 16.11.2 The Worker Execution Environment
- 16.11.3 Communication Channels and MessagePorts
- 16.11.4 Transferring MessagePorts and Typed Arrays
- 16.11.5 Sharing Typed Arrays Between Threads
- 16.12 Summary
- JavaScript Tools and Extensions
- 17.1 Linting with ESLint
- 17.2 JavaScript Formatting with Prettier
- 17.3 Unit Testing with Jest
- 17.4 Package Management with npm
- 17.5 Code Bundling
- 17.6 Transpilation with Babel
- 17.7 JSX: Markup Expressions in JavaScript
- 17.8 Type Checking with Flow
- 17.8.1 Installing and Running Flow
- 17.8.2 Using Type Annotations
- 17.8.3 Class Types
- 17.8.4 Object Types
- 17.8.5 Type Aliases
- 17.8.6 Array Types
- 17.8.7 Other Parameterized Types
- 17.8.8 Read-Only Types
- 17.8.9 Function Types
- 17.8.10 Union Types
- 17.8.11 Enumerated Types and Discriminated Unions
- 17.9 Summary
- Index