Javascript Introduction

Lecture Notes for CS 142
Spring 2012
John Ousterhout

  • Additional reading for this topic:
    • Skim over pages 1-146 of Javascript, The Definitive Guide to get a sense of the general facilities provided by the language: types, expressions, statements, object model, arrays, etc. You can read portions of this material in more detail as you work through the projects.
  • Javascript: object-oriented scripting language.
  • Basic syntax similar to Java and C:
    sum = 0;
    for (i = 1; i < 10; i++) {
        sum += i*i;
    }
    
  • Javascript is a scripting language: dynamic, interpreted. Simple object system based on prototypes.
  • Variables:
    • Untyped: types associated with values, not with variables
      • Any variable can hold any value.
    • No need for declarations: variables created when assigned
    • Scope is either local (within a function) or global.
    • Default is global (careful!) use var to declare a local variable.
    • No block-level scoping within a function.
  • Basic data types:
    • Numbers (everything is floating-point, no integers)
    • Strings (variable-length); no char type.
    • Booleans
    • null
    • Undefined
  • Statements are similar to those in Java or C.
  • Arrays:
    • Ordered collections of values.
    • Indexed by integers.
    • Creation:
      x = new Array();
      y = ["a", 123, 65]
      
    • May be sparse.
    • Length: array.length
    • Lots of methods, such as push, pop, and sort.
  • Objects:
    • Unordered collections of name-value pairs called properties.
    • Creation:
      x = new Object()
      y = {name: "Alice", age: 23, state: "California"}
      
    • Referenced either like a structure or like a hash table with string keys:
      o = new Object();
      o.name = "Alice";
      o["age"] = 23;
      
    • Can define new properties on-the-fly.
    • Global object: all global variables are actually properties of a distinguished object called the global object. You will hear more about the global object later.
  • Functions:
    • Simple example:
      function fac(x) {
          if (x <= 1) {
              return 1;
          }
          return x*fac(x-1);
      }
      
    • Can have variable number of arguments:
      • arguments variable
      • Unspecified arguments have value undefined
    • All functions return a value (default is value of the last statement).
  • eval: interpret a string as Javascript code, execute on the fly.
  • Classes:
    • Functions are first-class values:
      plus1 = function(value) {
          return value + 1;
      }
      
      plus1(24) returns 25
    • A property of an object can be a function; if so, it can be invoked using method notation:
      Object o = new Object();
      o.count = 0;
      o.increment = function(inc) {
          if (inc == undefined) {
              inc = 1;
          }
          this.count += inc;
          return this.count;
      }
      
      o.increment() returns 1
      o.increment(3) returns 4
    • Use this to refer to instance variables
    • There is no difference between a method and a function except for this:
      • In method invocation this refers to the object.
      • In function invocation this refers to the global object.
    • A function can also have properties, just like Objects:
      function plus1(value) {
          if (plus1.invocations == undefined) {
              plus1.invocations = 0;
          }
          plus1.invocations++;
          return value + 1;
      }
      
    • A constructor is a function named after the class
      function Rectangle(width, height) {
          this.width = width;
          this.height = height;
      }
      r = new Rectangle(26, 14);
      
    • How do new objects acquire methods?
    • Approach #1: add methods in the constructor:
      function Rectangle(width, height) {
          this.width = width;
          this.height = height;
          this.area = function() {
              return this.width*this.height;
          }
      }
      
    • Approach #2: Define methods on a prototype objects
      • Associate each instance with a particular prototype
      • Automatically apply methods from the prototype to the instance.
      • The prototype property on the constructor function serves this purpose:
        Rectangle.prototype.area = function() {
            return this.width*this.height;
        }
        
      • When Javascript looks up a property (e.g. a method), if it can't find it on the object itself, it looks for it in the prototype property of its class (constructor function).
    • Inheritance: create prototype as instance of parent class
      Rectangle.prototype = new Shape(...);
      
      If desired property is not in Rectangle.prototype then Javascript will look in Shape.prototype and so on.
    • What Javascript features correspond to the following constructs in Java?
      • Class?
      • Method?
      • Instance variable?
      • Class variable?
      • Static variable?
      • Static method?
  • How to get Javascript into a Web page:
    • By including a separate file:
      <script type="text/javascript" src="code.js"></script>
      
    • Inline in the HTML:
      <script type="text/javascript">
      //<![CDATA[
      Javascript goes here...
      //]]>
      </script>
      
    • Event handlers:
      <p onclick="alert('Hello world!');">
      Click here.</p>