1   Intro to Javascript
CS380
    Why use client-side programming?
2
    PHP already allows us to create dynamic web pages.
    Why also use client-side scripting?
     client-side scripting (JavaScript) benefits:
           usability: can modify a page without having to post
            back to the server (faster UI)
           efficiency: can make small, quick changes to page
            without waiting for server
           event-driven: can respond to user actions like clicks
            and key presses
    CS380
    Why use client-side programming?
3
       server-side programming (PHP) benefits:
           security: has access to server's private data; client can't
            see source code
           compatibility: not subject to browser compatibility
            issues
           power: can write files, open connections to servers,
            connect to databases, ...
    CS380
    What is Javascript?
4
       a lightweight programming language ("scripting
        language")
           used to make web pages interactive
           insert dynamic text into HTML (ex: user name)
           react to events (ex: page load user click)
           get information about a user's computer (ex: browser
            type)
           perform calculations on user's computer (ex: form
            validation)
    CS380
    Linking to a JavaScript file:
5
    script
    <script src="filename" type="text/javascript"></script>
                               HTML
       script tag should be placed in HTML page's head
       script code is stored in a separate .js file
       JS code can be placed directly in the HTML file's
        body or head (like CSS)
           but this is bad style (should separate content,
            presentation, and behavior
    CS380
    A JavaScript statement: alert
6
    alert("IE6 detected. Suck-mode enabled.");
                          JS
       a JS command that pops up a dialog box with a
        message
    CS380
    Event-driven programming
7
       you are used to programs start with a main method
        (or implicit main like in PHP)
       JavaScript programs instead wait for user actions
        called events and respond to them
       event-driven programming: writing programs
        driven by user events
       Let's write a page with a clickable button that pops
        up a "Hello, World" window...
    CS380
    Buttons
8
    <button>Click me!</button>                 HTML
       button's text appears inside tag; can also contain
        images
       To make a responsive button or other UI control:
        1.   choose the control (e.g. button) and event (e.g.
             mouse 1. click) of interest
        2.   write a JavaScript function to run when the event
             occurs
        3.   attach the function to the event on the control
    CS380
    Event-driven programming
9
       split breaks apart a string into an array using a
        delimiter
           can also be used with regular expressions (seen later)
       join merges an array into a single string, placing a
        delimiter between them
    CS380
     JavaScript functions
10
     function name() {
     statement ;
     statement ;
     ...
     statement ;
     }                               JS
     function myFunction() {
        alert("Hello!");
        alert("How are you?");
     }                                     JS
      the above could be the contents of example.js
       linked to our HTML page
      statements placed into functions can be evaluated
       in response to user events
     CS380
     Event handlers
11
     <element attributes onclick="function();">...
                          HTML
     <button onclick="myFunction();">Click me!</button>
                             HTML
        JavaScript functions can be set as event handlers
            when you interact with the element, the function will
             execute
        onclick is just one of many event HTML attributes
         we'll use
     CS380
     Document Object Model (DOM)
12
        most JS code manipulates
         elements on an HTML page
        we can examine elements'
         state
            e.g. see whether a box is
             checked
        we can change state
            e.g. insert some new text into
             a div
        we can change styles
            e.g. make a paragraph red
     DOM element objects
13
     Accessing elements:
14
     document.getElementById
     var name = document.getElementById("id");
                                         JS
     <button onclick="changeText();">Click me!</button>
     <span id="output">replace me</span>
     <input id="textbox" type="text" />          HTML
     function changeText() {
        var span = document.getElementById("output");
        var textBox = document.getElementById("textbox");
             textbox.style.color = "red";
     }                                      JS
     CS380
     Accessing elements:
15
     document.getElementById
        document.getElementById returns the DOM object
         for an element with a given id
        can change the text inside most elements by setting
         the innerHTML property
        can change the text in form controls by setting the
         value property
     CS380
     Changing element style:
16
     element.style
     Attribute          Property or style object
     color              color
     padding            padding
     background-color   backgroundColor
     border-top-width   borderTopWidth
     Font size          fontSize
     Font famiy         fontFamily
     CS380
     Preetify
17
     function changeText() {
        //grab or initialize text here
         // font styles added by JS:
         text.style.fontSize = "13pt";
         text.style.fontFamily = "Comic Sans MS";
         text.style.color = "red"; // or pink?
     }                                    JS
     CS380
18   More Javascript Syntax
                     CS380
     Variables
19
     var name = expression;                   JS
     var clientName = "Connie Client";
     var age = 32;
     var weight = 127.4;                           JS
        variables are declared with the var keyword (case
         sensitive)
        types are not specified, but JS does have types
         ("loosely typed")
            Number, Boolean, String, Array, Object,
             Function, Null, Undefined
            can find out a variable's type by calling typeof
     CS380
     Number type
20
     var enrollment = 99;
     var medianGrade = 2.8;
     var credits = 5 + 4 + (2 * 3);
                          JS
        integers and real numbers are the same type (no int
         vs. double)
        same operators: + - * / % ++ -- = += -= *= /= %=
     CS380
     Comments (same as Java)
21
     // single-line comment
     /* multi-line comment */
                   JS
        identical to Java's comment syntax
        recall: 4 comment syntaxes
            HTML: <!-- comment -->
            CSS/JS/PHP: /* comment */
            Java/JS/PHP: // comment
            PHP: # comment
     CS380
         Math object
22
     var rand1to10 = Math.floor(Math.random() * 10 + 1);
     var three = Math.floor(Math.PI);
                       JS
        methods: abs, ceil, cos, floor, log,
         max, min, pow, random, round, sin,
         sqrt, tan
        properties: E, PI
     CS380
         Special values: null and undefined
23
     var ned = null;
     var benson = 9;
     // at this point in the code,
     // ned is null
     // benson's 9
     // caroline is undefined
                     JS
        undefined : has not been declared, does not
         exist
        null : exists, but was specifically assigned an
         empty or null value
     CS380
      Logical operators
24
        > < >= <= && || ! == != === !==
        most logical operators automatically convert types:
            5 < "7" is true
            42 == 42.0 is true
            "5.0" == 5 is true
        === and !== are strict equality tests; checks both
         type and value
            "5.0" === 5 is false
     CS380
         if/else statement (same as Java)
25
     if (condition) {
        statements;
     } else if (condition) {
        statements;
     } else {
        statements;
     }
                                       JS
        identical structure to Java's if/else statement
        JavaScript allows almost anything as a condition
     CS380
     Boolean type
26
     var iLike190M = true;
     var ieIsGood = "IE6" > 0; // false
     if ("web devevelopment is great") { /* true */ }
     if (0) { /* false */ }
                       JS
        any value can be used as a Boolean
            "falsey" values: 0, 0.0, NaN, "", null, and undefined
            "truthy" values: anything else
     CS380
      for loop (same as Java)
27
     var sum = 0;
     for (var i = 0; i < 100; i++) {
        sum = sum + i;
     }                               JS
     var s1 = "hello";
     var s2 = "";
     for (var i = 0; i < s.length; i++) {
        s2 += s1.charAt(i) + s1.charAt(i);
     }
     // s2 stores "hheelllloo"               JS
     CS380
     while loops (same as Java)
28
     while (condition) {
        statements;
     }                                JS
     do {
        statements;
     } while (condition);
                       JS
        break and continue keywords also behave as in
         Java
     CS380
     Popup boxes
29
     alert("message"); // message
     confirm("message"); // returns true or false
     prompt("message"); // returns user input string
                                  JS
     CS380
     Arrays
30
     var name = []; // empty array
     var name = [value, value, ..., value]; // pre-filled
     name[index] = value; // store element
                           JS
     var ducks = ["Huey", "Dewey", "Louie"];
     var stooges = []; // stooges.length is 0
     stooges[0] = "Larry"; // stooges.length is 1
     stooges[1] = "Moe"; // stooges.length is 2
     stooges[4] = "Curly"; // stooges.length is 5
     stooges[4] = "Shemp"; // stooges.length is 5
                              JS
     CS380
     Array methods
31
     var a = ["Stef", "Jason"]; // Stef, Jason
     a.push("Brian"); // Stef, Jason, Brian
     a.unshift("Kelly"); // Kelly, Stef, Jason, Brian
     a.pop(); // Kelly, Stef, Jason
     a.shift(); // Stef, Jason
     a.sort(); // Jason, Stef
                       JS
        array serves as many data structures: list, queue,
         stack, ...
        methods: concat, join, pop, push, reverse, shift,
         slice, sort, splice, toString, unshift
            push and pop add / remove from back
            unshift and shift add / remove from front
            shift and pop return the element that is removed
     Splitting strings: split and join
32
     var s = "the quick brown fox";
     var a = s.split(" "); // ["the", "quick", "brown", "fox"]
     a.reverse(); // ["fox", "brown", "quick", "the"]
     s = a.join("!"); // "fox!brown!quick!the"
                           JS
        split breaks apart a string into an array using a
         delimiter
            can also be used with regular expressions (seen later)
        join merges an array into a single string