Eloquent JavaScript [Libro]

Hola a todos, hoy os traigo un libro sobre JavaScript de Marijn Haverbeke.

Descarga aquí el libro.

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
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
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

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
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
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
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
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
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

Espero que os sea de ayuda.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *