javascript mini books

Upload: edwin-wong

Post on 04-Apr-2018

225 views

Category:

Documents


0 download

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

    [email protected]

  • 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

    [email protected]

  • 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