JavaScript 101

World of ECMAScript

Primitive Types

/** A few primitives **/

// booleans
true, false

// strings
"hello", 'world', "hello \nworld"

// numbers
10, 0x10, 010, 10.0, 10.


/** And two trivial **/

// no assigned value or property not exists
undefined

// a special value indicating no value
null

JavaScript is a completely dynamic language​ - no "types"

Implicit Type Conversion

String Number Boolean Object
undefined "undefined" NaN false Error
null "null" 0 false Error
Nonempty string Numeric value or Nan true String 
Empty string 0 false String
0 "0" false Number
NaN "NaN" false Number
Infinity "Infinity" true Number
Negative infinity "-Infinity true Number
number string value true Number
true "true" 1 Boolean
false "false" 0 Boolean

Variable Declaration

  • Variable is declared using var keyword
  • Variables are scoped to the function, not to the block
var a = 0;     // "a" is a "global" variable here

function test() {
  b = 10;      // QUESTION: Is "b" a variable?

  for (var i = 0; i < 10; i++) {
    a++;       // global variable is visible in inner scopes
  }

  return i;    // == 10 because "i" is scoped under "test()", not "for"
}

Operators

Most akin to most other major languages, the tricky part is logical operators: 

// If the first operand can be converted to true, 
// returns its unconverted value

var foo = "test" || 200;    // "test"

// If the first operand cannot be converted to true, 
// returns its unconverted value

var foo = '' && 200;        // ''

// Otherwise, its second operand is evaluated, 
// and returns the value of expresssion

var bar = '' || 0 || 200;   // 200
var bar = "test" && 200;    // 200

|| is widely used to make a default value chain

&& could be considered as a short for if () expr;

Built-in Objects

The built-in objects are a subtype of native objects which are built into the ECMAScript prior to the beginning of a program.

 

  • Primitive Wrapper Objects: Boolean, String, Number

  • Core Objects: Object, Array, Function

  • Util Objects: Math, Date, RegExp, Error

  • Literal & JSON

 

Question: Is "document" a built-in object?

Primitive Wrappers

  • Boolean, String, Number are built-in wrappers for boolean, string, number primitives

 

 

  • Wrapper objects have useful properties and methods, e.g. substring, toFixed, etc.
    • While these methods actually work on primitives, too, via the boxing mechanism
var s = new String("string");     // typeof s === 'object'
var n = new Number(10.0);         // typeof n === 'object'
var b = new Boolean(true);        // typeof b === 'object'
s.substr(1) === "string".substr(1) === 'tring'

n.toFixed() === 10.0.toFixed() === 10..toFixed() === 10

Tips and Tricks: Primitive's Property

The Object Object

  • Object is the "root" of all built-in objects, which can be considered as hash table of key-value pairs

 

 

  • While just avoid to use object constructor with primitive value, it may cause mess
var o = new Object();    // {}
o.foo = "bar";           // { foo: 'bar' }
delete o.foo;            // {}
var s = new Object("string");    // = new String("string")
var n = new Object(10.0);        // = new Number(10.0)
var b = new Object(true);        // = new Boolean(true)

The Array Object

  • Akin to most other major languages
  • Array constructor curiousness:

 

 

  • The length property retrieves the index of the next available (unfilled) position at the end of the array, and is auto updated as new elements are added.
var a1 = new Array();            // [] - empty array
var a2 = new Array('a', 'b');    // ['a','b'] - array with 2 items
var a3 = new Array(2);           // [empty x 2] - empty with length of 2
a1.length === 0
a2.length === a3.length === 2

// What happens if length is set to 0
a3.length = 0;

JavaScript Object Literals

var o = new Object();
o.prop1 = val1;
o.prop2 = val2;



var a = new Array(
  element1,
  element2,
  ...,
  elementN
);


var f = new Function(
  "arg1",
  "arg2",
  ...,
  "argN",
  "statement"
);


var r = new RegExp("exp", "flags"); 
var o = {
  prop1: val1,
  prop2: val2
};


var a = [
  element1,
  element2,
  ...,
  elementN
];


var f = function(arg1, ..., argN) {
  statements
};






var r = /exp/flags;

JavaScript Object Notation

  • JSON is a lightweight data-interchange format, which derived from JavaScript programming language.
  • Parse JSON text into JavaScript object via eval function

JavaScript 101

By Haili Zhang

JavaScript 101

  • 828