Copyright
By wangyoutian@nilnul.com
Free for non-commercial use.
Editable provided that the copyright claim is
included.
Notational Conventions
For Heading Slides:
Background
Hue: Red, Yellow, Green, Cyan, Blue, Magenta
as in Iris
Saturation decreases
Brightness increases
Color offset to Background
Font size
decreases
Position
Shifted right
Sideline slides are grey
Notational Conventions
Unordered List Bullets
Ordered by color and the bigness of colored area
Font size decreases
The most worth-learning language
Contents
Intro
Values
Types
Literal
Var
Function Call
Expression
Statements
objects
Closure
regex
An Example
<html>
<head>
<script type="text/javascript">
function displayDate()
{
document.getElementById(“demo”).innerHTML=Date();
}
</script>
</head>
<body>
<h1>My First Web Page</h1>
<p id=“demo”>This is a paragraph.</p>
<button type=“button” onclick=“displayDate()”>Display Date</button>
</body>
</html>
The History Of ES
NetScape
liveScript
javaScript
Not Java
ECMA
The Script
JavaScript
VBScript
IDE
Notepad
Visual Studio
…
DreamWeaver
ECMAScript in HTML
<script>
</script>
<script src=“.js”></script>
Not <script src=“.js”/>
Location in head
<html>
<head>
<!—loaded before page loading-->
<script type="text/javascript“>
function displayDate(){
document.getElementById("demo").innerHTML=Date();
}
< /script>
< /head>
<body>
<h1>My First Web Page</h1>
<p id="demo"></p>
<button
type="button"
Date</button>
</body>
< /html>
onclick="displayDate()">Display
Location in body
<html>
< body>
<h1>My First Web Page</h1>
<p id="demo"></p>
<script
type="text/javascript">
document.getElementById("demo").innerHTML=Date();
< /script>
</body>
< /html>
<!--Note that the JavaScript is placed at the bottom of the page to make sure
it is not executed before the <p> element is created.-->
Multiple Locations
unlimited number of scripts in your document
in both the body and the head section at the
same time.
Location Matters
For browser not supporting ES
Browsers that do not
support JavaScript, will
display JavaScript as
page content.
The
content
is
commented so that
nothing is displayed.
<html>
<body>
<script type="text/javascript">
< !—
document.getElementById("demo").innerHTML=Date();
//-->
</script>
The two forward slashes at the end
</body>
of comment line (//) is the
< /html>
JavaScript comment symbol.
This prevents JavaScript
from executing the -->
tag.
Literals, Constants/Variables, Expressions
And their types, scopes, etc
Values
Language Types
primitive
Undefined
Null
Boolean
Number
String
Object
Function
Array
typeof
()
typeof(expr)
typeof
expr
returns a string
Lowercase
boolean
string number undefined object function
typeof null;
//object
typeof (function(){})
Undefined
Value: undefined
alert(undefined);
//undefined
alert(window.b); //undefined
alert(a); //nothing, maybe err
alert(1); //nothing ‘cuz prvious err
Null
Value: null
typeof null;
// in IE, object!
Bool
true
false
Number
64-bit
+0,-0
Infinity
+Infinity
-Infinity
NaN
String
“string”
‘’
Escape
\”
\’
\\
\t
\n
\f
new – function as Constructor
{name:value}
{“name”:value}
object the type
Object
alert([{},{i:1});
//[object
Object],[object
Object]
alert([new Date(),typeof new Date()]); //date in
string, object
alert([Math,typeof
Math,
Math.constructor,Math.prototype]}; //[object
Math],object,function (){[native code]},object
Math
alert(window); //[object]
Property Attributes
Data Property Attributes
[[Value]]
[[Writable]]
[[Enumerable]]
[[Configurable]]
Accessor Property Attributes
Get
Set
Configurable
Enumerable
internal
Internal Property
delete {}.name;
alert();
delete window.alert
Array
alert([
[],typeof []
]);
//,object
//note [] is empty concat-ed
alert([
new Array(),typeof new Array()
])
//, object
alert([
Array(), typeof Array()
]);
//,object
Array as object
//{[[Class]]:”Array”, 0:…,1:…,}
[1,”a”][3];
//undefined
Function
function(){}
function(x,y){return x+y;}
…
function as val
alert(function(){});
alert(typeof(function{}));
var a=function(){};
//function
function as object
//{[[Call]]
:function(){},[[Class]]:”Function”, ……}
function(){}.name;
function(){}.name=“1”;
var a=function(){};
a.name=“1”;
alert(a);
alert(a.name);
Var name
Variable names must begin with a
letter or the underscore character
_1,
_a_,
_,
__
$
These are wrong:
1,
2a,
A-b
Var declaration
Declare a var
var a;
A var can be used without declaration
Var type and value
Weak type.
The type of var is mutable
A=1;A=“hello”;
Scope of Var
declared
within
a
function
can only be accessed
within that function.
Local
variables
are
destroyed when you exit
the function.
can
have
local
variables with the same
name
in
different
functions,
because
local variables
are only recognized by
the function in which
they are declared.
declared outside a function;
– If you declare a variable,
without using "var", the
variable always becomes
GLOBAL.
• all scripts and functions
on the web page can
access.
• destroyed when you close
the page.
Global scope can be regarded as within a virtual global func.
var a=1;
alert(window.a);
//1
//window.a=undefined;
delete (window.a);
alert(a); //undefined
function [[Call]]
function has an internal [[Call]] property.
To call a function
funcName(a1,a2,…);
Parameter/arguments
(function (x0,x1){
alert(x0);
alert(
[
arguments[1],arguments[2]
]
);
})(1);
//1//undefined
Operator
+-*/% on number,+ on string
If you add a number and a string, the result
will be a string!
==,!=,>,<,>=,<=,===,!==
&&,||,!
&,|,^,~,>>,<<,>>>
Bool?obj:obj
,
,
expr1,expr2
//expr2
expr1,expr2,expr3
(expr1,expr2),expr3
alert((1, 2)); //2
alert((1,2,3));//3
alert(1, 2); //1
//expr3
==
Ref, pointing to the same obj
Val,
alert([] == []);//false
alert(1==1);
//true;
alert(“”==“”);
//true
void-operator
void
void 1;
void (1);
void(1);
Expressions
Operator can be regarded as func.
Expr is a func call.
E.g
1+1
a=1
1+a
typeof(a)+””;
Statements
Case sensitive
Semicolon
Using
semicolons makes it possible to write
multiple statements on one line.
JavaScript code (or just JavaScript)
sequence of JavaScript statements.
Blocks
{}
is
a
Comment
//
//comment
var a=1; //coment
/* */
var a=1; /*coment*/
var a /*comment*/ =1;
var a=1;/*coment and
Comment*/
Using Comments to Prevent Execution
Var declaration and assignment
var a=1;
=,[+-*/%]=,++,--,+=on string
Function declaration
var a=function(){};
function a(){};
Operator-Statements
if(){}
else{}
Switch
Switch (aVar){
Case 1:
…
Break;
Case “”:
…
Break;
Default:
…
Break;
}
Use break to prevent the code from running into
the next case automatically.
For
for(;;){
break;
continue;
}
While/Do/In
While(){break;continue;}
Do{}while()
for(var in collection){}
return
return ;
return {
};
//not return
// {}
label
Outer:
for (i = 1; i <= 10; i++) {
document.write ("<br />");
document.write ("i: " + i);
document.write (" j: ");
Inner:
for (j = 21; j <= 30; j++) {
if (j == 24) {
continue Inner;
//When j is 24, the continue
statement causes that for loop to go to the next iteration.
}
document.write (j + " ");
}
}
Try/Catch/Finally
try/catch/finally lets you deal with exceptions
gracefully. It does not catch syntax errors,
however (for those, you need to use the onerror
event).
Try catch recursive
try
{
…
}
catch (e){
try{
…
} //end inner try
catch (e){
…
} //end inner catch
}//end
outer
catch
throw
throw "Err2";
The exception can be a string, integer, Boolean
or
an
object
On error
try/catch/finally does not catch syntax errors.
for those, you need to use the onerror event
<head>
<script
type="text/javascript">
window.onerror=function(){
alert('An
error
has
occurred!')
}
</script>
<script
document.write('hi
</head>
type="text/javascript">
there'
</script>
Debugger tools
Vs
Fire bug
IE debugging tools
debugger
debugger;//tells the
debugger to pause
here.
debugger
You can place debugger statements anywhere in
procedures to suspend execution.
Using the debugger statement is similar to
setting a breakpoint in the code.
The debugger statement suspends execution, but
it does not close any files or clear any
variables.
The debugger statement has no effect unless the
script is being debugged.
The process a function constructs an object
Construct objects using constructor
new- syntax
new constructor ([arguments]) ;
//The parentheses can be omitted
constructor takes no arguments.
new constructor;
if
//=new constructor()
the
function as constructor
var person=function (name, age){
this.name=name;
this.age=age;
};
var zs=new person(“zhangsan”,10);
var zs2=person(‘z’,10);
function Area(){
return 3.14*this.radius*this.radius;
}
function Circle(radius){
this.radius=radius;
}
var c=new Circle();
c.Area=Area;
Constructor vs call
var person=function (name, age){
this.name=name;
this.age=age;
return {};
};
var zs=new person(“zhangsan”,10);
//zs={};
var zs2=person(“z”,10); //{}
Constructor vs call
var person=function (name, age){
this.name=name;
this.age=age;
return 1;
};
var zs=new person(“zhangsan”,10);
//zs={name:”z”,age:10};
var zs2=person(“z”,10); //1
new-actions
1. It creates an object with no members.
2. It calls the constructor for that object,
passing a pointer to the newly created
object as the this pointer.
3. The constructor then initializes the object
according to the arguments passed to the
constructor.
4. Return the object if the function returns
no object;
.prototype
Only preceded by function
var c=function(){};
var i=new c;
i.p1; //undefined.
var i2=new c;
c.prototype.p1=1;
i.p1; //1
i2.p1;
//1
c.prototype={};
i.p1; //1
i2=new c;
i2.p1; //undefined
Every function has an own
property: prototype.
The object constructed
will
inherit
the
prototype
Note you cannot change
which object to inherit.
unless you create a new
object after changing
function’s prototype.
var c=function(){};
var i=new c;
i.p1;
//undefined.
Object.prototype.p1=1;
i.p1; //1;
c.prototype.p1=2;
i.p1;
i.p1=3;
i.p1;
A function’s prototype
initially
inherits
Object.prototype.
So constructed object
inherits function’s
prototype, and then
inherits
Object.prototype
All succeeding Object.prototype
Object.prototype
predecessor
is
an
object,
has
no
The function’s prototype can change to any
other available objects, which all succeed
object.prototype. So newly constructed objects
will succeed Object.prototype as well.
Application of Inheritance
function car() {
this.wheels=4;
}
function benz(color) {
this.color=color;
benz.prototype
=
car();
audi.prototype
benz.prototype;
new
=
}
var b = new benz("red");
var a = new audi("blue");
function audi(color) {
this.color=color;
}
alert(b.wheels); //4
alert(a.wheels); //4
Object.prototype
inherits none
•Default
function1.prototype
•changable
Any object
eventually
inherits it
inherit
Object.prototype
function1
object1
inherit
.prototype
Inherit current
function1.prototype
object2
inheritance not
writable
.constructor
•(Initial
function1.prototype).const
ructor :=function1
.constructor
inherit
Object.prototype
function1
object1
inherit
.prototype
object2
•object2 has
no .constructor initially
•So object2.constructor
is got from the
inheritance chain
Object.protot
ype
inherit
function MyConstructor() {}
var myobject = new MyConstructor();
myobject.constructor == MyConstructor; //true
function1
object1
inherit
.prototy
pe
object
2
inherit
function MyConstructor() {}
Object.proto
MyConstructor.prototype = {};
type
var
myobject
=
new
MyConstructor();
//current prototype is {}
myobject.constructor == MyConstructor; // false
function1
object1
inherit
.prototy
pe
object
2
function MyConstructor() {}
MyConstructor.prototype = {};
var myobject = new MyConstructor();
myobject.constructor == Object;
//true
{}.constructor==Object, a special function
instanceof
An operator
instanceof
object1 instanceof constructor1
//constructor1.prototype
(current)
object1.parents(*)
in
Eg
function MyConstructor() {}
MyConstructor.prototype = {};
var myobject = new MyConstructor();
myobject instanceof MyConstructor; // true
Eg
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype = {};
alert([
myobject instanceof MyConstructor,
false !
myobject.constructor == MyConstructor,
true !
myobject instanceof Object
//true
]);
//
//
Built in and host objects
Category
Native Objects
Built In
String, Number, Array, Image, Date, Math
User-Defined Objects.
Host Objects
window
Object is of the [object] type.
Object can be used as a [function]
Thus a constructor.
Object
.prototype
function
(){[navti
ve code]}
Object
Inherit{1}
alert(Object
instanceof Object);
//true
alert(Object
instanceof
Function);
//true
alert(typeof Object);
//function
inherit
Object.pr
ototype
Object
Object.prototype
Object.prototype.toString
switch(this)
undefined
[object Undefined]
null
[object Null]
Other
[object Class]
Object.prototype
Properties
Object.prototype.toString ( )
[object class]
Append Property
Extensible, not implementable
Unless specified otherwise, the [[Extensible]]
internal property of a built-in object
initially has the value true.
Append property
Cannot be assigned
null an object
//exception
Primitive: string,number,boolean,undefined
they’re immune to appending
appendable
function
object
Object.pr
ototype
inherit
Function’s Constructor
.prototype
Function
function
(){[navti
ve code]}
Inherit{1}
Function.prototype.a=1;
alert(Function.a);
Function
Object.pr
ototype
.prototype
Function
function
(){[navti
ve code]}
Inherit{1}
function f() { }
alert(f.constructor);
alert(f.constructror.constru
ctor);
alert(Function.constructor);
alert(f.constructor.construc
tor.constructor);
alert(f.constructor.construc
tor.constructor.constructo
r);
inherit
(A function)’s Constructor
funct
ion1
Function the [[Class]]
Function is a sub[[Class]] of
“Object”[[Class]]
Function.prototype
Function prototype object is itself a Function
object (its [[Class]] is "Function") that,
when invoked, accepts any arguments and
returns undefined.
Unless specified otherwise, the [[Class]]
internal property of a built-in object is
"Function" if that built-in object has a
[[Call]] internal property, or "Object" if
that built-in object does not have a [[Call]]
internal property.
Function Instances
function
function a() { }
a=function(){}
function (){}
new Function()
Function(…)
String
var a = String("a");
var b = new String("b");
alert(typeof a);//string
alert(a);//a;
alert(typeof b);//object
alert(b);//b
Date
Date() returns a string
new Date() returns an object
inspect(
Date()
);
inspect(
new Date()
);
Math
[[Class]] Math
Array
[[Class]]:Array
Date.prototype.toString
This function returns a String value. The
contents of the String are implementationdependent, but are intended to represent the
Date in the current time zone in a convenient,
human-readable form.
JSON
contains two functions, parse and stringify,
[[Class]] JSON
Extensible
[[Construct]] false
[[Call]] false
RegEx
Such as DOM
DOM
Window
document
…
alert()
prompt()
confirm()
open()
Alert(undefined)
alert(x) //exception assuming
defined yet
//alert(typeof(b)
=="undefined"?"undefined":blur);
aledrt(b);
"x"
isn't
Document.write
<html>
< body>
< h1>My First Web Page</h1>
<script type="text/javascript">
document.write("<p>" + Date() + "</p>");
< /script>
< /body>
< /html>
Note:Try to avoid using document.write() in real life JavaScript code. The
entire HTML page will be overwritten if document.write() is used inside
a function, or after the page is loaded. However, document.write() is an
easy way to demonstrate JavaScript output in a tutorial.
Change the content of Tag
<html>
<
<
<
<script
<
< /body>
< /html>
h1>My
First
p
body>
Web
Page</h1>
id="demo"></p>
type="text/javascript">
document.getElementById("demo").innerHTML=Date();
/script>
Event
Fired by Host Objects
event
<html>
<body onclick="alert(Date()); ">
</body>
< /html>
Types of Execution Code
Global
Eval
function
Closure
var bind = function (x) {
return function (y) { return x + y; };
}
var plus5 = bind(5);
alert(plus5(3));
this in function
function Circle(radius) {
this.radius = radius;
this.circum =function() {
return (radius * 6.28);
}
}
var circle = new Circle(1);
alert(circle.circum());
//6.28
circle.radius=10;
alert(circle.circum());
//6.28
function
Accumulator(start) {
function
Accumulator(start) {
var current = start;
return function (x) {
return function (x) {
start += x;
return start;
current += x;
return current;
};
}
function
Accumulator(start)
{
return function (x)
{
};
return start+x;
}
};
}
var a = Accumulator(4);
//function(x){return current/start/current;} where current/start is
var
alert(a);
var x = a(5); //x has value 9
alert(x);
x = a(2); //x has value 11 ,11, 6
alert(x);
var b = Accumulator(42);
//current2=42
alert(b);
x = b(7); //x has value 49
alert(x);
x = a(7); //x has value 18,18, 11
alert(x);
function Accumulator(start) {
//var current = start;
return function (x) {
current += x;
return current;
};
}
var a = Accumulator(4);
//a=function(x){current+=x;return
current;}
current is kept from var in Accumulator and current=4
alert(a);
var x = a(5); //x has value 9
current=4+5; return 9
alert(x);
x = a(2); //x has value 11 //current=9+2
alert(x);
var b = Accumulator(42);
//current2=42
alert(b);
x = b(7); //x has value 49 (current=42 in closure b)
//current2=42+7
alert(x);
x = a(7); //x has value 18 (current=11 in closure a)
//current=11+7
alert(x);
where
Lambda Lifting
//Initial version
function sum(n) {
if(n
==
1)
{ return 1; }
else {
function
f(x)
{ return n +
x; };
return f( sum(n
- 1) ); }
}
//After converting
the
free
variable n to a
formal parameter
w
function sum(n) {
if(n
==
1)
{ return 1; }
else {
function f(w,
x) { return w +
x; };
return f( n,
sum(n - 1) );
}
}
//After
lifting
function f into
the global scope
function f(w, x) {
return w + x;
};
function sum(n) {
if(n
==
1)
{ return 1; }
else { return
f( n, sum(n 1) ); }
}
Further Reading
W3schools.com
Ecma-international.org
Google.com
…
web
Thank You!
Window/navigator/document manipulation
XmlHttpRequest
jquery
Script vs Program
Suppose you went back to Ada Lovelace and
asked her the difference between a script
and a program. She‘d probably look at you
a
script is what you give the
actors, but a program is what
you give the audience. That Ada
funny, then say something like: Well,
was one sharp lady…
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )