Eloquent JavaScript, 2nd Ed.: A Modern Introduction to Programming

Author: Marijn Haverbeke
Publisher: No Starch Press
Keywords: programming, introduction, modern, javascript, eloquent
Number of Pages: 472
Published: 2014-12-01
ISBN-10: 1593275846
ISBN-13: 9781593275846

Book Description:

Contents On programming . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Why language matters . . . . . . . . . . . . . . . . . . . . . . . 4 What is JavaScript? . . . . . . . . . . . . . . . . . . . . . . . . . 6 Code, and what to do with it . . . . . . . . . . . . . . . . . . . 8 Overview of this book . . . . . . . . . . . . . . . . . . . . . . . . 9 Typographic conventions . . . . . . . . . . . . . . . . . . . . . . 10 1 Values, Types, and Operators 11 Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Unary operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Boolean values . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Undefined values . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Automatic type conversion . . . . . . . . . . . . . . . . . . . . . 19 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2 Program Structure 23 Expressions and statements . . . . . . . . . . . . . . . . . . . . 23 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Keywords and reserved words . . . . . . . . . . . . . . . . . . . 26 The environment . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 The console.log function . . . . . . . . . . . . . . . . . . . . . . 28 Return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 prompt and confirm . . . . . . . . . . . . . . . . . . . . . . . . . 29 Control flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Conditional execution . . . . . . . . . . . . . . . . . . . . . . . . 30 while and do loops . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Indenting Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 ii for loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Breaking Out of a Loop . . . . . . . . . . . . . . . . . . . . . . 36 Updating variables succinctly . . . . . . . . . . . . . . . . . . . 36 Dispatching on a value with switch . . . . . . . . . . . . . . . . 37 Capitalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3 Functions 42 Defining a function . . . . . . . . . . . . . . . . . . . . . . . . . 42 Parameters and scopes . . . . . . . . . . . . . . . . . . . . . . . 43 Nested scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Functions as values . . . . . . . . . . . . . . . . . . . . . . . . . 46 Declaration notation . . . . . . . . . . . . . . . . . . . . . . . . 47 The call stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Optional Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 49 Closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Growing functions . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Functions and side effects . . . . . . . . . . . . . . . . . . . . . 58 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4 Data Structures: Objects and Arrays 61 The weresquirrel . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Data sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Mutability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 The lycanthrope’s log . . . . . . . . . . . . . . . . . . . . . . . . 69 Computing correlation . . . . . . . . . . . . . . . . . . . . . . . 71 Objects as maps . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 The final analysis . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Further arrayology . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Strings and their properties . . . . . . . . . . . . . . . . . . . . 78 iii The arguments object . . . . . . . . . . . . . . . . . . . . . . . . 79 The Math object . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 The global object . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5 Higher-Order Functions 86 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Abstracting array traversal . . . . . . . . . . . . . . . . . . . . . 88 Higher-order functions . . . . . . . . . . . . . . . . . . . . . . . 90 Passing along arguments . . . . . . . . . . . . . . . . . . . . . . 91 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Filtering an array . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Transforming with map . . . . . . . . . . . . . . . . . . . . . . . 95 Summarizing with reduce . . . . . . . . . . . . . . . . . . . . . . 95 Composability . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 The cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Great-great-great-great-… . . . . . . . . . . . . . . . . . . . . . . 99 Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6 The Secret Life of Objects 105 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Overriding derived properties . . . . . . . . . . . . . . . . . . . 110 Prototype interference . . . . . . . . . . . . . . . . . . . . . . . 112 Prototype-less objects . . . . . . . . . . . . . . . . . . . . . . . . 114 Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Laying out a table . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Getters and setters . . . . . . . . . . . . . . . . . . . . . . . . . 121 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 The instanceof operator . . . . . . . . . . . . . . . . . . . . . . . 124 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 iv 7 Project: Electronic Life 128 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Representing space . . . . . . . . . . . . . . . . . . . . . . . . . 129 A critter’s programming interface . . . . . . . . . . . . . . . . . 131 The world object . . . . . . . . . . . . . . . . . . . . . . . . . . 132 this and its scope . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Animating life . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 It moves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 More life forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 A more lifelike simulation . . . . . . . . . . . . . . . . . . . . . 141 Action handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Populating the new world . . . . . . . . . . . . . . . . . . . . . 144 Bringing it to life . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8 Bugs and Error Handling 149 Programmer mistakes . . . . . . . . . . . . . . . . . . . . . . . . 149 Strict mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Error propagation . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Cleaning up after exceptions . . . . . . . . . . . . . . . . . . . . 157 Selective catching . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 9 Regular Expressions 164 Creating a regular expression . . . . . . . . . . . . . . . . . . . 164 Testing for matches . . . . . . . . . . . . . . . . . . . . . . . . . 165 Matching a set of characters . . . . . . . . . . . . . . . . . . . . 165 Repeating parts of a pattern . . . . . . . . . . . . . . . . . . . . 167 Grouping subexpressions . . . . . . . . . . . . . . . . . . . . . . 168 Matches and groups . . . . . . . . . . . . . . . . . . . . . . . . . 168 The date type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Word and string boundaries . . . . . . . . . . . . . . . . . . . . 171 v Choice patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 The mechanics of matching . . . . . . . . . . . . . . . . . . . . 172 Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 The replace method . . . . . . . . . . . . . . . . . . . . . . . . . 176 Greed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Dynamically creating RegExp objects . . . . . . . . . . . . . . 179 The search method . . . . . . . . . . . . . . . . . . . . . . . . . 180 The lastIndex property . . . . . . . . . . . . . . . . . . . . . . . 180 Parsing an INI file . . . . . . . . . . . . . . . . . . . . . . . . . . 182 International characters . . . . . . . . . . . . . . . . . . . . . . . 184 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 10 Modules 188 Why modules help . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Using functions as namespaces . . . . . . . . . . . . . . . . . . . 191 Objects as interfaces . . . . . . . . . . . . . . . . . . . . . . . . 192 Detaching from the global scope . . . . . . . . . . . . . . . . . . 193 Evaluating data as code . . . . . . . . . . . . . . . . . . . . . . 194 Require . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Slow-loading modules . . . . . . . . . . . . . . . . . . . . . . . . 197 Interface design . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 11 Project: A Programming Language 205 Parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 The evaluator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Special forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 The environment . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Cheating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 12 JavaScript and the Browser 220 Networks and the Internet . . . . . . . . . . . . . . . . . . . . . 220 vi The Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 HTML and JavaScript . . . . . . . . . . . . . . . . . . . . . . . 225 In the sandbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Compatibility and the browser wars . . . . . . . . . . . . . . . 227 13 The Document Object Model 229 Document structure . . . . . . . . . . . . . . . . . . . . . . . . . 229 Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 The standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Moving through the tree . . . . . . . . . . . . . . . . . . . . . . 233 Finding elements . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Changing the document . . . . . . . . . . . . . . . . . . . . . . 235 Creating nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Styling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Cascading styles . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Query selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Positioning and animating . . . . . . . . . . . . . . . . . . . . . 246 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 14 Handling Events 252 Event handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Events and DOM nodes . . . . . . . . . . . . . . . . . . . . . . 253 Event objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Propagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Default actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Key events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Mouse clicks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Mouse motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Scroll events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Focus events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Load event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Script execution timeline . . . . . . . . . . . . . . . . . . . . . . 266 Setting timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 vii Debouncing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 15 Project: A Platform Game 272 The game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 The technology . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Reading a level . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Actors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Encapsulation as a burden . . . . . . . . . . . . . . . . . . . . . 279 Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Motion and collision . . . . . . . . . . . . . . . . . . . . . . . . . 285 Actors and actions . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Tracking keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Running the game . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 16 Drawing on Canvas 297 SVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 The canvas element . . . . . . . . . . . . . . . . . . . . . . . . . 298 Filling and stroking . . . . . . . . . . . . . . . . . . . . . . . . . 300 Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Drawing a pie chart . . . . . . . . . . . . . . . . . . . . . . . . . 306 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Storing and clearing transformations . . . . . . . . . . . . . . . 313 Back to the game . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Choosing a graphics interface . . . . . . . . . . . . . . . . . . . 320 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 17 HTTP 324 The protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Browsers and HTTP . . . . . . . . . . . . . . . . . . . . . . . . 326 viii XMLHttpRequest . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Sending a request . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Asynchronous Requests . . . . . . . . . . . . . . . . . . . . . . . 330 Fetching XML Data . . . . . . . . . . . . . . . . . . . . . . . . . 330 HTTP sandboxing . . . . . . . . . . . . . . . . . . . . . . . . . . 331 Abstracting requests . . . . . . . . . . . . . . . . . . . . . . . . 332 Promises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Appreciating HTTP . . . . . . . . . . . . . . . . . . . . . . . . . 338 Security and HTTPS . . . . . . . . . . . . . . . . . . . . . . . . 338 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 18 Forms and Form Fields 342 Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Focus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Disabled fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 The form as a whole . . . . . . . . . . . . . . . . . . . . . . . . 345 Text fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Checkboxes and radio buttons . . . . . . . . . . . . . . . . . . . 348 Select fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 File fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Storing data client-side . . . . . . . . . . . . . . . . . . . . . . . 353 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 19 Project: A Paint Program 359 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Building the DOM . . . . . . . . . . . . . . . . . . . . . . . . . 360 The foundation . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Tool selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Color and brush size . . . . . . . . . . . . . . . . . . . . . . . . 365 Saving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Loading image files . . . . . . . . . . . . . . . . . . . . . . . . . 368 Finishing up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 20 Node.js 376 ix Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Asynchronicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 The node command . . . . . . . . . . . . . . . . . . . . . . . . . 378 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Installing with NPM . . . . . . . . . . . . . . . . . . . . . . . . 381 The file system module . . . . . . . . . . . . . . . . . . . . . . . 382 The HTTP module . . . . . . . . . . . . . . . . . . . . . . . . . 384 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 A simple file server . . . . . . . . . . . . . . . . . . . . . . . . . 388 Error handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 21 Project: Skill-Sharing Website 399 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Long polling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 HTTP interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 The server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 The client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Program Structure . . . . . . . . . . . . . . . . . . . . . . . . . 424 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 Data Structures: Objects and Arrays . . . . . . . . . . . . . . . 426 Higher-Order Functions . . . . . . . . . . . . . . . . . . . . . . . 428 The Secret Life of Objects . . . . . . . . . . . . . . . . . . . . . 429 Project: Electronic Life . . . . . . . . . . . . . . . . . . . . . . . 430 Bugs and Error Handling . . . . . . . . . . . . . . . . . . . . . . 432 Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . 432 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Project: A Programming Language . . . . . . . . . . . . . . . . 435 The Document Object Model . . . . . . . . . . . . . . . . . . . 436 Handling Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Project: A Platform Game . . . . . . . . . . . . . . . . . . . . . 438 Drawing on Canvas . . . . . . . . . . . . . . . . . . . . . . . . . 439 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Forms and Form Fields . . . . . . . . . . . . . . . . . . . . . . . 442 Project: A Paint Program . . . . . . . . . . . . . . . . . . . . . 444 x Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Project: Skill-Sharing Website . . . . . . . . . . . . . . . . . . . 448 About the Author Marijn Haverbeke is an independent developer and author, focused primarily on programming languages and tools for programmers. He spends most of his time working on open source software, such as the CodeMirror editor and the Tern type inference engine.

Direct Download Links:

  • Download pdf from official website:
  • This work is licensed under a Creative Commons attribution-noncommercial license (h t t p://creativecommons.org/licenses/by-nc/3.0/).
  • eloquentjavascrip...nt_JavaScript.pdf


This publication is published under Creative Commons CC BY-NC license.

Related Books at ISBNlib

    Sorry,No related books at ISBNLib

Spread the word