javascript mini books
TRANSCRIPT
-
7/30/2019 javascript mini books
1/61
-
7/30/2019 javascript mini books
2/61
JavaScriptEloquent JavaScript: A Modern Introduction to Programming
Marijn Haverbeke
-
7/30/2019 javascript mini books
3/61
JavaScript JavaScript
JavaScript JavaScript JavaScript
JavaScript
12 1~3 JavaScript JavaScript
4~7 JavaScript JavaScript
8~12 JavaScript
Web HTTP
Copyright 2011 by Marijn Haverbeke. Title of English-language original: Eloquent JavaScript, ISBN 978-1-
59327-282-1, published by No Starch Press.
Simplified Chinese-language edition copyright 2012 by China Machine Press.
No part of this book may be reproduced or transmitted in any form or by any means, elec tronic or mechanical,
including photocopying, recording or any information storage and retrieval system, without permission, in writing,
from the publisher.
All rights reserved. No Starch Press
01-2012-2098
CIP
JavaScript / Haverbeke M. . 2012.9
Eloquent JavaScript: A Modern Introduction to Programming
ISBN 978-7-111-39665-9
. J . . JAVA - . TP312
CIP 2012 210644
22 100037
2012 10 1 1
186mm
240mm
11ISBN 978-7-111-39665-9
49.00
010 88378991 88361066010 68326294 88379649 68995259010 88379604
-
7/30/2019 javascript mini books
4/61
JavaScript Brendan Eich JavaScript
Angus Croll Twitter
JavaScript Marijn Haverbeke Joey deVilla Global Nerdy
JavaScript JavaScript
JavaScript Chris Williams JSConf
JavaScript Rey Bango Client-Web jQuery
JavaScript Ben Nadel Epicenter
Design Shack
JavaScript Designorati
JavaScript Craig Buckler OptimalWorks Web Design
-
7/30/2019 javascript mini books
5/61
JavaScript
Ajax
JavaScript
JavaScript
JavaScript
JavaScript
http://www.cnblogs.com/TomXu
-
7/30/2019 javascript mini books
6/61
20 70 BASIC
20 70
BASIC JavaScript Web
JavaScript
Donald Knuth
Joseph Weizenbaum Computer Power and Human Reason
-
7/30/2019 javascript mini books
7/61
VI
00110001 00000000 0000000000110001 00000001 0000000100110011 00000001 00000010
01010001 00001011 0000001000100010 00000010 0000100001000011 00000001 0000000001000001 00000001 0000000100010000 00000010 0000000001100010 00000000 00000000
I
1 10 1 + 2 + + 10 = 55
1 0
1 0 0
2 1 1
3 1 2
-
7/30/2019 javascript mini books
8/61
VII
4 2 11
5 2 0 9
6 1 0
7 1 18 3
9 0
Set 'total' to 0Set 'count' to 1
[loop]Set 'compare' to 'count'Subtract 11 from 'compare'
If 'compare' is zero, continue at [end]Add 'count' to 'total'Add 1 to 'count'Continue at [loop]
[end]Output 'total'
I
total
count compare
count 11
compare
count 11 count total
count 11 count 1
JavaScript
var total = 0, count = 1;while (count
-
7/30/2019 javascript mini books
9/61
VIII
print 1 10
range sum sum range
while
sum range
JavaScript
JavaScript
node.js JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript
JavaScript JavaScript
JavaScript Java
1995 JavaScript Java
Java
JavaScript ECMAScript JavaScript
ECMAScript ECMA
ECMAScript Web
JavaScript ECMAScript 3
JavaScript ECMAScript 3
print(sum(range(1, 10)));
I
-
7/30/2019 javascript mini books
10/61
IX
http://eloquentjavascript.net/
HTML
test.html
var total = 0, count = 1;while (count
-
7/30/2019 javascript mini books
11/61
1 + 1
2
I
http://nostarch.com/ejs.htm
X
-
7/30/2019 javascript mini books
12/61
1 JavaScript
1
1.1 1
1.1.1 1
1.1.2 2
1.1.3 3
1.1.4 3
1.1.5 4
1.1.6 5
1.2 5
1.3 7
1.3.1 7
1.3.2 prompt confirm 7
1.3.3 print 8
1.3.4 8
1.4 8
1.4.1 9
1.4.2 while do 9
1.4.3 11
1.4.4 for 11
1.4.5 12
1.4.6 12
1.4.7 switch 12
1.4.8 13
1.4.9 13
1.5 14
1.5.1 Undefined 14
1.5.2 14
1.5.3 15
1.5.4 && || 16
2 17
2.1 17
2.1.1 18
2.1.2 18
2.1.3 19
2.1.4 20
2.1.5 20
2.1.6 212.1.7 21
2.2 22
2.2.1 22
2.2.2 23
2.2.3 24
3 27
3.1 Emily 27
3.2 283.2.1 28
3.2.2 29
3.2.3 30
3.2.4 30
3.2.5 31
-
7/30/2019 javascript mini books
13/61
XII
3.2.6 32
3.3 Emily 33
3.3.1 33
3.3.2 34
3.3.3 35
3.3.4 35
3.3.5 36
3.3.6 38
3.3.7 39
3.3.8 40
3.3.9 41
3.4 42
3.4.1 arguments 42
3.4.2 44
3.4.3 Math 44
3.4.4 44
4 47
4.1 47
4.1.1 47
4.1.2 48
4.2 48
4.2.1 48
4.2.2 49
4.2.3 50
4.2.4 Error 51
4.2.5 51
4.2.6 Catch 51
4.3 52
5 55
5.1 55
5.2 56
5.2.1 57
5.2.2 58
5.2.3 59
5.3 59
5.3.1 HTML 60
5.3.2 61
5.3.3 64
5.3.4 64
5.3.5 67
5.3.6 HTML 67
5.3.7 70
5.4 71
5.4.1 71
5.4.2 72
5.4.3 73
6 75
6.1 75
6.1.1 75
6.1.2 76
6.1.3 77
6.1.4 77
6.1.5 79
6.1.6 80
6.1.7 81
6.2 82
6.2.1 82
6.2.2 83
6.2.3 83
6.2.4 85
6.2.5 86
6.2.6 this 87
6.2.7 88
6.2.8 90
6.2.9 90
6.2.10 93
-
7/30/2019 javascript mini books
14/61
XIII
6.3 93
6.3.1 93
6.3.2 94
6.3.3 96
6.3.4 97
6.3.5 97
6.3.6 99
6.4 100
6.4.1 100
6.4.2 101
6.4.3 102
6.4.4 instanceof 103
6.4.5 104
7 107
7.1 107
7.1.1 107
7.1.2 108
7.2 108
7.2.1 109
7.2.2 110
7.3 111
7.3.1 111
7.3.2 111
7.3.3 112
7.3.4 112
7.4 JS 113
8 115
8.1 115
8.1.1 115
8.1.2 116
8.1.3 117
8.1.4 117
8.1.5 117
8.2 118
8.2.1 118
8.2.2 118
8.2.3 RegExp 120
8.3 .ini 121
8.4 123
9 Web 125
9.1 125
9.1.1 URL 125
9.1.2 126
9.1.3 126
9.2 Web 126
9.2.1 windows 126
9.2.2 document 127
9.2.3 128
9.2.4 128
9.2.5 130
9.2.6 132
9.3 132
9.4 133
10 135
10.1 DOM 135
10.1.1 136
10.1.2 136
10.1.3 innerHTML 137
10.1.4 137
10.1.5 138
10.1.6 138
10.1.7 139
10.1.8 print 140
10.2 140
10.2.1 141
10.2.2 141
-
7/30/2019 javascript mini books
15/61
XIV
10.2.3 141
10.2.4 142
10.3 142
11 143
11.1 143
11.1.1 143
11.1.2 145
11.1.3 145
11.1.4 146
11.1.5 147
11.1.6 147
11.1.7 148
11.1.8 148
11.1.9 window 149
11.2 149
11.2.1 149
11.2.2 150
11.2.3 150
11.2.4 153
12 HTTP 157
12.1 HTTP 157
12.2 XMLHttpRequest API 158
12.2.1 158
12.2.2 158
12.2.3 159
12.2.4 XML 160
12.2.5 JSON 161
12.2.6 161
12.3 HTTP 162
-
7/30/2019 javascript mini books
16/61
1
JavaScript
bit
bit 0 1
1.1
JavaScript
JavaScript 6
number string Boolean object function undefined
bit
1.1.1
number
144
144 144 bit 144
0100000001100010000000000000000000000000000000000000000000000000
10010000 144
JavaScript 64
bit 64 1 0
-
7/30/2019 javascript mini books
17/61
2 1
264 10 19
JavaScript 10 19
bit 11
bit52 bit 252 10 15 JavaScript
.
9.81
e e
2.998e8
2.998
108
=299800000integer 52 bit
p 64 bit
1.1.2
JavaScript
100 + 4 * 11
+ *
4 100 11
(100 + 4) * 11
- /
1- 2 + 1
% X%Y X Y 314 %
100 14 10 % 3 1 144 % 12 0 %
53 bit bit IEEE 754
-
7/30/2019 javascript mini books
18/61
-
7/30/2019 javascript mini books
19/61
4 1
typeof -
- (10 - 2) -8
l l l l
1.1.5
true false3 > 2 true3 < 2 false
l l l l
>
-
7/30/2019 javascript mini books
20/61
5 JavaScript
! false true
| |
&& > ==
1.1.6
JavaScript 22 psychoanalysis
JavaScript
;
1;!false;
side
effect 1 true bit
JavaScript
1.2
JavaScript
var caught = 5 * 5;
caught 5 5 25
-
7/30/2019 javascript mini books
21/61
6 1
var ten = 10;ten * ten; 100
l l l l
var var
catch22 $ _ $_$
=
=
caught; 25caught = 4 * 4;caught; 16;
Luigi 35
var luigisDebt = 140;luigisDebt = luigisDebt - 35;luigisDebt; 105
var
JavaScript
abstract boolean break byte case catch char class const continue debuggerdefault delete do double else enum export extends false final finally floatfor function goto if implements import in instanceof int interface long nativenew null package private protected public return short static super switchsynchronized this throw throws transient true try typeof var void volatilewhile with
char class JavaScript
-
7/30/2019 javascript mini books
22/61
7 JavaScript
1.3
1.3.1
alert
alert("Good morning!");
l l l l
alert
alert
Math.max
Math.max(2, 4); 4
l l l l
JavaScript
Math.min(2, 4) + 100; 102
l l l l
2
1.3.2 prompt confirmconfirm
OK/Cancel OK true Cancel
false
confirm("Shall we, then?");l l l l
-
7/30/2019 javascript mini books
23/61
8 1
prompt
prompt("Tell me everything you know.", "...");
1.3.3 print
alert
print
Web
JavaScript
X
print("X");
1.3.4
print 8 7
1.4
var theNumber = Number(prompt("Pick a number", ""));alert("Your number is the square root of " + (theNumber * theNumber));
Number Number prompt
String Boolean
-
7/30/2019 javascript mini books
24/61
9 JavaScript
1.4.1
if
var theNumber = Number(prompt("Pick a number", ""));if (!isNaN(theNumber))
alert("Your number is the square root of " + (theNumber * theNumber));
l l l l
if !isNaN(theNumber)
true if
Number moo
NaN isNaN NaN
theNumber !isNaN(theNumber) true
else if
if (true == false)print("How confusing!");
elseprint("True still isn't false.");
l l l l
if/else
var num = prompt("Pick a number:", "0");
if (num < 10)print("Small");
else if (num < 100)print("Medium");
elseprint("Large");
num 10 10 small
10 if 100
10 100 Medium else
1.4.2 while do
0 12
print(0);print(2);print(4);print(6);
-
7/30/2019 javascript mini books
25/61
10 1
1000
var currentNumber = 0;while (currentNumber
-
7/30/2019 javascript mini books
26/61
11 JavaScript
Counter 1 10 0
do while
do
do {var input = prompt("Who are you?");
} while (!input);
l l l l
1.4.3
4 Tab
1.4.4 for
while counter
while counter
counter
JavaScript
for (var number = 0; number
-
7/30/2019 javascript mini books
27/61
12 1
1.4.5
break break
20 7
for (var current = 20; ; current++) {if (current % 7 == 0)
break;}current; 21
l l l l
%
0
for break
for (var current = 20; current % 7 != 0; current++); // Do nothing.
l l l l
; //
1.4.6
coun-
ter = counter + 1 JavaScript counter += 1
result *= 2 result 2 counter - = 1 counter 1
counter += 1 counter - = 1 counter++ counter --
var result = 1;for (var counter = 0; counter < 10; counter++)
result *= 2;
l l l l
1.4.7 switch
if (variable == "value1") action1();else if (variable == "value2") action2();else if (variable == "value3") action3();else defaultAction();
switch JavaScript
C Java if
-
7/30/2019 javascript mini books
28/61
13 JavaScript
switch(prompt("What is the weather like?")) {case "rainy":
print("Remember to bring an umbrella.");break;
case "sunny":print("Dress lightly.");
case "cloudy":print("Go outside.");break;
default:print("Unknown weather type!");break;
}
switch case switch
break sunny case
case sunny cloudy
break
1.4.8
fuzzylittleturtle fuzzy_little_turtle FuzzyLittleTurtle fuzzyLittleTurtle
JavaScript
JavaScript
Number
6
1.4.9
// Do nothing
// The variable counter, which is about to be defined, is going// to start with a value of 0, which is zero.var counter = 0;// Next, we loop. Hold on to your hat.while (counter < 100 / * counter is less than one hundred */)
-
7/30/2019 javascript mini books
29/61
14 1
/* */ //
1.5
JavaScript
1.5.1 Undefined
var something;
var mysteryVariable;mysteryVariable; undefined
l l l lundefined
print alert undefined null undefined
null
something == undefine null == undefined true
1.5.2
false == 0; true"" == 0; true"5" == 5; true
JavaScript
/ * Every time we loop, we INCREMENT the value of counter,You could say we just add one to it. */
counter++;// And here, we are done.
l l l l
-
7/30/2019 javascript mini books
30/61
15 JavaScript
null undefined null undefined true
false 0 NaN
false true 0 ""variable == false true
=== !==
=== false
null === undefined; falsefalse === 0; false"" === 0; false"5" === 5; false
if while for
0 "" null undefined false false
true
null
var maybeNull = null;// ... mystery code that might put a string into maybeNull ...if (maybeNull)
print("maybeNull has a value");
// maybeNull
maybeNull "" false
=== null ===false 0
1.5.3
JavaScript
"Apollo" + 5; "Apollo5"null + "ify"; "nullify""5" * 5; 25"strawberry" * 5; NaN
-
7/30/2019 javascript mini books
31/61
16 1
NaN strawberry NaN NaN
NaN 5 NaN NaN==NaN false
NaN isNaN
+ * +
*
Number
NaN
Number("5") * 5; 25
1.5.4 && ||
&& ||
|| true
var input = prompt("What is your name?", "Kilgore Trout");print("Well hello " + (input || "dear"));
prompt inputnull "" false input || "dear"
input "dear"
&& || false
true ||
X X true X
false && X alert
false || alert("I'm happening!");false && alert("Not me.");
-
7/30/2019 javascript mini books
32/61
2
1 alert print
2.1
function square(x) {return x * x;
}
square(12); 144
square x return x * x;
function function
while if
return return
return undefined
function power(base, exponent) {var result = 1;for (var count = 0; count < exponent; count++)
result *= base;
return result;}
power(2, 10); 1024
-
7/30/2019 javascript mini books
33/61
18 2
2.1.1
future future
print("The future says: ", future());
function future() {return "We STILL have no flying cars.";
}
function
function
2.1.2
power
result
power result
var
x
xx
var x = "A";
function setVarToB() {x = "B";
}setVarToB();x; "B";
function setVarToC() {var x;x = "C";
}setVarToC();x; "B";
-
7/30/2019 javascript mini books
34/61
19
return
undefined
2.1.3JavaScript
number factor
function multiplyAbsolute(number, factor) {function multiply(number) {
return number * factor;}
if (number < 0)return multiply(-number);else
return multiply(number);}
number multiply factor
number multiply number factor
multiplyAbsolute
JavaScript
var something = 1;{
var something = 2;// Do stuff with variable something...
}
// Outside of the block again...
//
//
something 2
if JavaScript
2
-
7/30/2019 javascript mini books
35/61
20 2
2.1.4
function chicken() {return egg();
}function egg() {
return chicken();}print(chicken() + " came first.");
2.1.5
JavaScript function
a false a a false
null b
var a = null;function b() {return "B";}(a || b)(); "B"
(a || b)() () (a || b)
function
var a = null;(a || function(){return "B";})(); "B"
b
-
7/30/2019 javascript mini books
36/61
21
function(){return "B";}
5
2.1.6
function createFunction() {var local = 100;return function(){return local;};
}
createFunction
(upwards Funarg problem)
JavaScript
createFunction()
100
function makeAdder(amount) {return function(number) {
return number + amount;};
}
var addTwo = makeAdder(2);addTwo(3); 5
2.1.7
alert("Hello", "Good Evening", "How do you do?", "Good-bye");
alert
Hello
JavaScript
-
7/30/2019 javascript mini books
37/61
22 2
undefined
power
function power(base, exponent) {var result = 1;if (exponent === undefined)
exponent = 2;for (var count = 0; count < exponent; count++)
result *= base;return result;
}
print R2D2print("R", 2, "D", 2);
2.2
JavaScript
2.2.1
power
0 3
var number = 5;if (number < 10)
print("0", number);else
print(number);
10 0 0 2
-
7/30/2019 javascript mini books
38/61
23
1 yes
2 print 0
zeroPad printZeroPadded print(zeroPad(5)) printZeroPadded(5)
3 0
function zeroPad(number, width) {var string = String(Math.round(number));while (string.length < width)
string = "0" + string;return string;
}
Math.round String
2.2.2
Purity
zeroPad printZeroPadded print
zeroPad print print
-
7/30/2019 javascript mini books
39/61
24 2
2.2.3
power
function power(base, exponent) {if (exponent == 0)
return 1;else
return base * power(base, exponent - 1);}
while for for
JavaScript 10
JavaScript
power
power
1 5 3
13 1 3 5 15
-
7/30/2019 javascript mini books
40/61
25
find 5
3 history
goal
|| start 5 false start 3
else {
var found = find(start + 5, "(" + history + " + 5)");if (found == null)
found = find(start * 3, "(" + history + " * 3)");return found;
}
function findSequence(goal) {function find(start, history) {
if (start == goal)return history;
else if (start > goal)return null;
elsereturn find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");}return find(1, "1");
}
findSequence(24); (((1 * 3) + 5) * 3)
-
7/30/2019 javascript mini books
41/61
-
7/30/2019 javascript mini books
42/61
3
3.1 Emily
Emily 50
Drake
Igor
Emily
died 27/04/2006: Black Leclre born 05/04/2006 (mother Lady Penelope): Red Lion, DoctorHobbles the 3rd, Little Iroquois
Doctor Hobbles Penelope Lady 5
-
7/30/2019 javascript mini books
43/61
28 3
Emily Spot
1 Spot
2
3 born died
4 born
5 died
12
3
Emily
3.2
3.2.1
JavaScript
length
var text = "purple haze";text["length"]; 11text.length; 11
null undefined
-
7/30/2019 javascript mini books
44/61
29
3.2.2
length
var cat = {color: "gray", name: "Spot", size: 46};cat.size = 47;cat.size; 47delete cat.size;cat.size; undefined
size 46
size
undefined delete
=
var empty = {};empty.notReally = 1000;empty; {notReally: 1000}
var thing = {"gabba gabba": "hey", 5: 10};thing["5"]; 10thing[2 + 3]; 10delete thing["gabba gabba"];
var propertyName = "length";var text = "coco";text[propertyName]; 4
in
var chineseBox = {};chineseBox.content = chineseBox;"content" in chineseBox;
-
7/30/2019 javascript mini books
45/61
30 3
3.2.3
in
in 6
Spot WhiteFang Spot
Asoka
var set = {"Spot": true};set["White Fang"] = true;delete set["Spot"];"Asoka" in set; false
3.2.4
1
120 120
var object1 = {value: 10};var object2 = object1;var object3 = {value: 10};
object1 == object2; true
object1 == object3; false
object1.value = 15;object2.value; 15object3.value; 10
true"content" in chineseBox.content; true
-
7/30/2019 javascript mini books
46/61
31
object1 object2
object1 object2 object3 object1
JavaScript == truefalse
3.2.5
6
var mailArchive = {"the first email": "Dear nephew, ...","the second email": "..."/ * and so on ... */};/* ...*/};
var mailArchive = {0: "Dear nephew, ... (mail number 1)",1: "(mail number 2)",2: "(mail number 3)"};
for (var current = 0; current in mailArchive; current++)print("Processing email #", current, ": ", mailArchive[current]);
length
[]
var mailArchive = ["mail one", "mail two", "mail three"];
for (var current = 0; current < mailArchive.length; current++)print("Processing email #", current, ": ", mailArchive[current]);
0
1
1 0
0
-
7/30/2019 javascript mini books
47/61
32 3
0 X X-1
for current
-
7/30/2019 javascript mini books
48/61
33
toUpperCase
var mack = [];
mack.push("Mack");mack.push("the");mack.push("Knife");mack; ["Mack", "the", "Knife"]mack.join(" "); "Mack the Knife"mack.pop(); "Knife"mack; ["Mack", "the"]
push range result. push(i) result[i] = i pop push
join
3.3 Emily
ARCHIVE
for (var i = 0; i < ARCHIVE.length; i++) {var email = ARCHIVE[i];// Do something with this email...
}//
born
died
3.3.1
JavaScript
1
split
join
-
7/30/2019 javascript mini books
49/61
34 3
email.split("\n")
3.3.2
born died
charAt x.charAt(0)
x.charAt(1) born
var paragraph = "born 15-11-2003 (mother Spot): White Fang";paragraph.charAt(0) == "b" && paragraph.charAt(1) == "o" &&
paragraph.charAt(2) == "r" && paragraph.charAt(3) == "n"; true
10
slice
paragraph.slice(0, 4) == "born"; true
startsWith
true false
function startsWith(string, pattern) {return string.slice(0, pattern.length) == pattern;
}
startsWith("rotation", "rot"); true
charAt slice pattern string
startsWith"Pip".charAt(250); """Nop".slice(1, 10); "op"
charAt "" slice
startsWith("Idiots", "Most honored colleagues") startsWith
var words = "Cities of the Interior";words.split(" "); ["Cities", "of", "the", "Interior"]
-
7/30/2019 javascript mini books
50/61
35
pattern string slice pattern string
== false
3.3.3
1
2
3 died born
indexOf
slice
function catNames(paragraph) {var colon = paragraph.indexOf(":");return paragraph.slice(colon + 2).split(", ");
}
catNames("born 20/09/2004 (mother Yellow Bess): Doctor Hobbles the 2nd, Noog"); ["Doctor Hobbles the 2nd", "Noog"]
+2
split
3.3.4
var livingCats = {"Spot": true};
for (var mail = 0; mail < ARCHIVE.length; mail++) {var paragraphs = ARCHIVE[mail].split("\n");for (var i = 0; i < paragraphs.length; i++) {
var paragraph = paragraphs[i];if (startsWith(paragraph, "born")) {
var names = catNames(paragraph);for (var name = 0; name < names.length; name++)
-
7/30/2019 javascript mini books
51/61
36 3
if ("Spot" in livingCats)print("Spot lives!");
elseprint("Good old Spot, may she rest in peace.");
in for
for (var cat in livingCats)print(cat);
3.3.5
startsWith catNames
function addToSet(set, values) {for (var i = 0; i < values.length; i++)
set[values[i]] = true;}
function removeFromSet(set, values) {for (var i = 0; i < values.length; i++)
delete set[values[i]];}
var livingCats = {Spot: true};
for (var mail = 0; mail < ARCHIVE.length; mail++) {
livingCats[names[name]] = true;}else if (startsWith(paragraph, "died")) {
var names = catNames(paragraph);
for (var name = 0; name < names.length; name++)delete livingCats[names[name]];
}}
}
-
7/30/2019 javascript mini books
52/61
37
var paragraphs = ARCHIVE[mail].split("\n");for (var i = 0; i < paragraphs.length; i++) {
var paragraph = paragraphs[i];if (startsWith(paragraph, "born"))
addToSet(livingCats, catNames(paragraph));else if (startsWith(paragraph, "died"))
removeFromSet(livingCats, catNames(paragraph));}
}
addToSet removeFromSet set livingCats
addToSet livingCats
addCatsToCatSet
livingCatsset
function findLivingCats() {var livingCats = {"Spot": true};
function handleParagraph(paragraph) {if (startsWith(paragraph, "born"))
addToSet(livingCats, catNames(paragraph));else if (startsWith(paragraph, "died"))
removeFromSet(livingCats, catNames(paragraph));}
for (var mail = 0; mail < ARCHIVE.length; mail++) {var paragraphs = ARCHIVE[mail].split("\n");for (var i = 0; i < paragraphs.length; i++)
handleParagraph(paragraphs[i]);}
return livingCats;}
livingCats
findLivingCats
handleParagraph
-
7/30/2019 javascript mini books
53/61
38 3
livingCats
findLivingCats
var howMany = 0;for (var cat in findLivingCats())
howMany++;print("There are currently ", howMany, " cats alive.");
3.3.6
(year)(month) (day)
var when = {year: 1980, month: 2, day: 1};
JavaScript new
var when = new Date(1980, 1, 1);
{}; new
6
// Produces a date object for the current time.new Date();//
// February (!) 1st, 1980new Date(1980, 1, 1);// March 30th, 2007, 30 seconds past 8:20new Date(2007, 2, 30, 8, 20, 30);
// 1980 2 1
// 2007 3 30 8 20 30
4 0
0 11 1
get
var today = new Date();print("Year: ", today.getFullYear(), ", month: ",
today.getMonth(), ", day: ", today.getDate());print("Hour: ", today.getHours(), ", minutes: ",
today.getMinutes(), ", seconds: ", today.getSeconds());
-
7/30/2019 javascript mini books
54/61
39
print("Day of week: ", today.getDay());
getDay 4 get set
1970 1 1
var today = new Date();today.getTime(); 1266587282246
var wende = new Date(1989, 10, 9);var gulfWarOne = new Date(1990, 6, 2);wende < gulfWarOne; truewende == wende; true
// but be careful...wende == new Date(1989, 10, 9); false
// ...
< > = ==
true ==
false
==
false >= ==
var wende1 = new Date(1989, 10, 9),wende2 = new Date(1989, 10, 9);
wende1.getTime() == wende2.getTime(); true
1
12 7
getTimezoneOffset
(GMT)
new Date().getTimezoneOffset(); -60
3.3.7
"born 02/04/2001 (mother Clementine): Bugeye, Wolverine""died 27/04/2006: Black Leclre"
getDay getDate setDate
-
7/30/2019 javascript mini books
55/61
40 3
extractDate
function extractDate(paragraph) {function numberAt(start, length) {
return Number(paragraph.slice(start, start + length));}return new Date(numberAt(11, 4), numberAt(8, 2) - 1, numberAt(5, 2));
}
Number 1
Number slice
1 Emily 1
8
3.3.8
true
death
addToSet removeFromSet
function catRecord(name, birthdate, mother) {return {name: name, birth: birthdate, mother: mother};
}
function addCats(set, names, birthdate, mother) {for (var i = 0; i < names.length; i++)
set[names[i]] = catRecord(names[i], birthdate, mother);}function deadCats(set, names, deathdate) {
for (var i = 0; i < names.length; i++)set[names[i]].death = deathdate;
}
catRecord
Spot Record born 15/11/2003 (mother Spot) ....
function extractMother(paragraph) {var start = paragraph.indexOf("(mother ") + "(mother ".length;var end = paragraph.indexOf(")");return paragraph.slice(start, end);
-
7/30/2019 javascript mini books
56/61
41
"(mother " indexOf "(mother "
function findCats() {var cats = {"Spot": catRecord("Spot", new Date(1997, 2, 5), "unknown")};function handleParagraph(paragraph) {
if (startsWith(paragraph, "born"))addCats(cats, catNames(paragraph), extractDate(paragraph),
extractMother(paragraph));
else if (startsWith(paragraph, "died"))deadCats(cats, catNames(paragraph), extractDate(paragraph));}
for (var mail = 0; mail < ARCHIVE.length; mail++) {var paragraphs = ARCHIVE[mail].split("\n");for (var i = 0; i < paragraphs.length; i++)
handleParagraph(paragraphs[i]);}return cats;
}
catsfindCats
3.3.9
Emily
}
extractMother("born 15/11/2003 (mother Spot): White Fang"); "Spot"
function formatDate(date) {return date.getDate() + "/" + (date.getMonth() + 1) + "/" +
date.getFullYear();}
function catInfo(data, name) {var cat = data[name];if (cat == undefined)
return "No cat by the name of " + name + " is known.";
-
7/30/2019 javascript mini books
57/61
42 3
catInfo return
4return
oldestCat
function oldestCat(data) {var oldest = null;
for (var name in data) {var cat = data[name];if (!("death" in cat) && (oldest == null || oldest.birth > cat.birth))
oldest = cat;}
if (oldest == null)return null;
elsereturn oldest.name;
}
if oldest
null oldest
3.4
3.4.1 arguments
arguments
0 1
var message = name + ", born " + formatDate(cat.birth) +" from mother " + cat.mother;
if ("death" in cat)message += ", died " + formatDate(cat.death);
return message + ".";}
// For example...catInfo(catData, "Fat Igor"); "Fat Igor, born 1/6/2004 from mother Miss Bushtail."
-
7/30/2019 javascript mini books
58/61
43
length
arguments pushlength JavaScript
function argumentCounter() {return "You gave me " + arguments.length + " arguments.";
}argumentCounter("Straw man", "Tautology", "Ad hominem"); "You gave me 3 arguments."
print arguments
function add(number, howmuch) {if (arguments.length < 2)
howmuch = 1;return number + howmuch;
}
add(6); 7add(6, 4); 10
range 2 1
0 1 range
2
function range(start, end) {if (arguments.length < 2) {
end = start;start = 0;
}var result = [];for (var i = start; i
-
7/30/2019 javascript mini books
59/61
44 3
3.4.2
print(sum(range(1, 10)));range sum
function sum(numbers) {var total = 0;for (var i = 0; i < numbers.length; i++)
total += numbers[i];return total;
}
sum(range(1, 10)); 55
3.4.3 Math
Math.max Math.min Math
max min
Math
max
JavaScript
Math Math.cos sin tan acos asin atan p e Math.PI Math.E
Math.pow
power Math.sqrt Math.max Math.min
Math.round Math.floor Math.ceil
3.4.4
Math
for (var name in Math)print(name);
-
7/30/2019 javascript mini books
60/61
45
for (var name in ["Huey", "Dewey", "Louie"])print(name);
0 1 2 length push join
toString
6
for in
-
7/30/2019 javascript mini books
61/61