CS 318 - Week 5 Lecture - 2-20-13
INTRO (just an intro!) to JavaScript
* we are focusing on CLIENT-side JavaScript
in this course
...executes ON the presentation-tier/client-side!
* the first version of JavaScript was created
by Netscape for its browsers;
...nowadays, it might be more accurate to
say that JavaScript is now Netscape's dialect
of ECMAScript, a web standard
* the latest specification of the language
ECMAScript 5
* the ECMAScript specification does not describe
the Document Object Model (DOM),
which is standardized by the Word Wide Web
Consortium (W3C)
...the DOM defines the way that HTML document
objects are exposed to your script
* browsers often include tools to help you with
your JavaScript...
WHERE will we "put" JavaScript?
* you can put "external" JavaScript in files
whose names end in .js
* you can also put JavaScript in an HTML document --
we'll try to do so using so-called
unobtrusive style
* in this style, you try to limit the
JavaScript (and its "snippets") to the
head element of a page
(to try to separate it from document content)
* When we are referring to an external JavaScript
(within the head element)
the CS 318 class-standard-style for this will
be:
<script src="URL-or-relative-file-name"
type="text/javascript">
</script>
And for inserting JavaScript (in the head
element), you don't need the src attribute:
<script type="text/javascript">
...
</script>
* another class coding standard:
If a page depends on JavaScript to work properly,
WARN the user via a noscript element in its
body!
<noscript>
...your warning...
</noscript>
...see example in three-param-form.html
About JavaScript!
* it IS case-sensitive
* types it recognizes:
* Number
* Logical (Boolean) true false
(BUT! values of other types are treated
as "truthy" or "falsy" if used in a
logical context)
* String e.g.,"Hi" 'Hi'
* null - indicates a null value,
is a language keyword
is a primitive value
Null, NULL, etc. are NOT the same thing
* undefined - a top-level property whose value
is undefined;
also a primitive value
* a few other useful values to know about:
NaN - this is the result you may get
when you do an arithmetic operation
on something JavaScript can't otherwise
assume how to handle
Infinity - this is the result you get when
you do something like divide by 0
* so, there's really a small number of
data types --
BUT, there are many lovely objects available!
* Core JavaScript contains a core
set of predefined useful objects,
including:
Array
Date
Math
String
...and many more
...and JavaScript being within a web page
causes MORE page-related objects to
be created
Variables in JavaScript...
* it is preferred to declare local variables
using var
var a = "moo";
...they ARE dynamically typed, it is
perfectly OK for me to now say:
a = 42;
* JavaScript identifiers must start
with a letter, underscore, or $ and
followed by 0 or more letters, underscores,
$, or digits
* if you DON'T put the var before a variable's
first use,
you actually get a GLOBAL variable,
which will generate a strict JavaScript warning,
and is DISCOURAGED unless you have a good reason.
WE'LL AVOID GLOBAL VARIABLES in CS 318...
* something like:
var thisOne;
...at this point, thisOne has that
undefined value we mentioned earlier;
COMPARATOR NOTE:
* use == for equality,
use === for equal-AND-the-same-type
var input;
...
if (input === undefined)
{
...
}
else
{
...
}
* (although undefined is treated as "falsy"
when used in a boolean context)
* scope in JavaScript can be interesting,
see the Mozilla JavaScript guide for more
information
a bit about the DOM (Document Object Model)
* an entire HTML page (when there's JavaScript
in the page) becomes a JavaScript object named
document
* has MANY data fields and MANY methods
* one very useful method:
getElementById
* expects a string,
returns the object version of the HTML
element in that page whose id attribute
has that value
* (and each such object also has data
fields and methods...)
* function syntax:
function desired_name(desired_param, desired_param,
...)
{
...
[return ret_expr];
}
...and call it with desired_name(arg, arg, ...)
please.js shows an example of a function,
used (attached to a button's onclick attribute)
in js-play1.html
* you can have anonymous functions
function()
{
}
...they are frequently used to attach functions
to attributes
* window
* a global DOM object, the browser window
* falsey values:
false
0
NaN
"" // the empty string
null
undefined
* SINCE we'd like to refuse to pass on a form
that doesn't meet given criteria,
we need to know how to use JavaScript to that effect
* form elements have an onsubmit attribute
* if you call a function "on submit",
when the user attempts to submit a form,
then IF that function returns true,
the form submission will be allowed to proceed,
BUT if that function returns false,
the form submission will NOT proceed. (it'll
be blocked)
see three-param-form.html