Chapter 4
Chapter 4
4.1. Introduction
JavaScript often abbreviated as JS, is a programming language that is one of the core technologies of the
World Wide Web, alongside HTML and CSS. As of 2022, 98% of websites use JavaScript on the client side
for webpage behavior, often incorporating third-party libraries. All major web browsers have a dedicated
JavaScript engine to execute the code on users' devices.
JavaScript engines were originally used only in web browsers, but are now core components of some
servers and a variety of applications. The most popular runtime system for this usage is [Link]. Although
Java and JavaScript are similar in name, syntax, and respective standard libraries, the two languages are
distinct and differ greatly in design. JavaScript and Java are completely different languages, both in
concept and design. JavaScript was invented by Brendan Eich in 1995, and became an ECMA standard in
1997. ECMA-262 is the official name of the standard. ECMAScript is the official name of the language.
JavaScript was initially created to “make web pages alive”. The programs in this language are called
scripts. They can be written right in a web page’s HTML and run automatically as the page loads. Scripts
are provided and executed as plain text. They don’t need special preparation or compilation to run. In this
aspect, JavaScript is very different from another language called Java.
When JavaScript was created, it initially had another name: “LiveScript”. But Java was very popular at that
time, so it was decided that positioning a new language as a “younger brother” of Java would help. But as
it evolved, JavaScript became a fully independent language with its own specification called ECMAScript,
and now it has no relation to Java at all. ECMAScript is a JavaScript standard intended to ensure the
interoperability of web pages across different browsers. It is standardized by Ecma International in the
document ECMA-262. Ecma International is a nonprofit standards organization for information and
communication systems. It acquired its current name in 1994, when the European Computer
Manufacturers Association (ECMA) changed its name to reflect the organization's global reach and
activities. As a consequence, the name is no longer considered an acronym and no longer uses full
capitalization.
4.2. Starting with JavaScript
In HTML, JavaScript code is inserted between <script> and </script> tags. Old JavaScript examples
may use a type attribute: <script type="text/javascript">. The type attribute is not required. JavaScript
is the default scripting language in HTML.
You can place any number of scripts in an HTML document. Scripts can be placed in the <body>, or in
the <head> section of an HTML page, or in both. Placing scripts at the bottom of the <body> element
improves the display speed, because script interpretation slows down the display. Scripts can also be
placed in external files. External scripts are practical when the same code is used in many different
web pages. JavaScript files have the file extension .js. To use an external script, put the name of the
script file in the src (source) attribute of a <script> tag:
<script src="[Link]"></script>
You can place an external script reference in <head> or <body> as you like. The script will behave as if it
was located exactly where the <script> tag is located. External scripts cannot contain <script> tags. Placing
scripts in external files has some advantages:
It separates HTML and code
It makes HTML and JavaScript easier to read and maintain
Cached JavaScript files can speed up page loads
To add several script files to one page - use several script tags.
<script src="[Link]"></script>
<script src="[Link]"></script>
The HTML DOM can be accessed with JavaScript (and with other programming languages). In the DOM, all
HTML elements are defined as objects. The programming interface is the properties and methods of each
object. A property is a value that you can get or set (like changing the content of an HTML element). A
method is an action you can do (like add or deleting an HTML element).
The easiest way to get the content of an element is by using the innerHTML property.
The innerHTML property is useful for getting or replacing the content of HTML elements.
The innerHTML property can be used to get or change any HTML element, including <html>
and <body>.
The HTML DOM document object is the owner of all other objects in your web page. The document
object represents your web page. If you want to access any element in an HTML page, you always start
with accessing the document object.
Method Description
[Link](id) Find an element by element id
[Link](name) Find elements by tag name
[Link](name) Find elements by class name
Property Description
[Link] = new html content Change the inner HTML of an element
[Link] = new value Change the attribute value of an HTML element
[Link] = new style Change the style of an HTML element
Method Description
[Link](attribute, value) Change the attribute value of an HTML element
Method Description
[Link](element) Create an HTML element
[Link](element) Remove an HTML element
[Link](element) Add an HTML element
[Link](new, old) Replace an HTML element
[Link](text) Write into the HTML output stream
Method Description
[Link](id).onclick = function(){code} Adding event handler code to an onclick event
Property Description
[Link] Returns all <a> elements that have a name attribute
[Link] Returns the absolute base URI of the document
[Link] Returns the <body> element
[Link] Returns the document's cookie
[Link] Returns the document's doctype
[Link] Returns the <html> element
[Link] Returns the mode used by the browser
[Link] Returns the URI of the document
[Link] Returns the domain name of the document server
[Link] Returns all <embed> elements
[Link] Returns all <form> elements
[Link] Returns the <head> element
[Link] Returns all <img> elements
[Link] Returns the DOM implementation
[Link] Returns the document's encoding (character set)
[Link] Returns the date and time the document was updated
[Link] Returns all <area> and <a> elements that have a href attribute
[Link] Returns the (loading) status of the document
[Link] Returns the URI of the referrer (the linking document)
[Link] Returns all <script> elements
[Link] Returns if error checking is enforced
[Link] Returns the <title> element
[Link] Returns the complete URL of the document
You can skip the window keyword. In JavaScript, the window object is the global scope object. This means
that variables, properties, and methods by default belong to the window object. This also means that
specifying the window keyword is optional.
Example:
<html>
<head>
<title>Java</title>
</head>
<body>
<p id="demo"> </p>
<script>
[Link]("demo").innerHTML=5+6;
alert("I am alerting. You got this?");
[Link]("Hi");
</script>
<button type="button" onclick="[Link]('The write property');">Click here</button>
</body>
</html>
4.5. JavaScript Statements
A computer program is a list of "instructions" to be "executed" by a computer. In a programming
language, these programming instructions are called statements. A JavaScript program is a list of
programming statements. JavaScript statements are composed of: Values, Operators, Expressions,
Keywords, and Comments. Most JavaScript programs contain many JavaScript statements. The
statements are executed, one by one, in the same order as they are written. Semicolons separate
JavaScript statements. Add a semicolon at the end of each executable statement. When separated by
semicolons, multiple statements on one line are allowed. Ending statements with semicolon is not
required, but highly recommended.
JavaScript ignores multiple spaces. You can add white space to your script to make it more readable. For
best readability, programmers often like to avoid code lines longer than 80 characters. If a JavaScript
statement does not fit on one line, the best place to break it is after an operator.
JavaScript statements can be grouped together in code blocks, inside curly brackets {...}. The purpose of
code blocks is to define statements to be executed together. One place you will find statements grouped
together in blocks, is in JavaScript functions.
JavaScript statements often start with a keyword to identify the JavaScript action to be performed.
The JavaScript syntax defines two types of values: Fixed values and Variable values.
Fixed values
o Fixed values are called Literals. The two most important syntax rules for fixed values
are: Numbers that are written with or without decimals and Strings that are text,
written within double or single quotes.
Variable values
o Variable values are called Variables. In a programming language, variables are used to
store data values. JavaScript uses the keywords var, let and const to declare variables.
An equal sign is used to assign values to variables.
4.7. JavaScript Comments
JavaScript comments can be used to explain JavaScript code, and to make it more readable. JavaScript
comments can also be used to prevent execution, when testing alternative code.
In Single Line Comments, that start with //, Any text between // and the end of the line will be
ignored by JavaScript (will not be executed).
o Example
// Change heading
Multi-line comments start with /* and end with */. Any text between /* and */ will be ignored by
JavaScript.
o Example
/*
The code below will change the heading with id = "myH"
and the paragraph with id = "myP" in my web page:
*/
Examples:
var x = 5;
let x = 5;
const price1 = 5;
const price2 = 6;
let total = price1 + price2;
All JavaScript variables must be identified with unique names. These unique names are called identifiers.
Identifiers are JavaScript names. Identifiers are used to name variables and keywords, and functions. The
rules for legal names are the same in most programming languages. A JavaScript name must begin with:
A letter (A-Z or a-z)
A dollar sign ($)
Or an underscore (_)
Subsequent characters may be letters, digits, underscores, or dollar signs.
Numbers are not allowed as the first character in names.
JavaScript is Case Sensitive
All JavaScript identifiers are case sensitive.
Creating a variable in JavaScript is called "declaring" a variable. After the declaration, the variable has no
value (technically it is undefined). To assign a value to the variable, use the equal sign. You can also assign
a value to the variable when you declare it. You can declare many variables in one statement by
separating the variables by comma.
If you re-declare a JavaScript variable declared with var, it will not lose its value. But you cannot re-
declare a variable declared with let or const.
Variables declared inside a { } block cannot be accessed from outside the block.
Example:
{
let x = 2;
}
// x can NOT be used here
Variables declared with the var keyword can NOT have block scope. Variables declared inside a { } block
can be accessed from outside the block.
Example
{
var x = 2;
}
// x CAN be used here
Variables defined with var are hoisted to the top and can be initialized at any time. You can use the
variable before it is declared.
Example:
carName = "Volvo";
var carName;
JavaScript const variables must be assigned a value when they are declared. A const variable cannot be
reassigned.
Example
const PI = 3.141592653589793;
PI = 3.14; // This will give an error
PI = PI + 10; // This will also give an error
Redeclaring an existing var or let variable to const, in the same scope, is not allowed:
Example
var x = 2; // Allowed
const x = 2; // Not allowed
{
let x = 2; // Allowed
const x = 2; // Not allowed
}
{
const x = 2; // Allowed
const x = 2; // Not allowed
}
Reassigning an existing const variable, in the same scope, is not allowed:
Example:
const x = 2; // Allowed
x = 2; // Not allowed
var x = 2; // Not allowed
let x = 2; // Not allowed
const x = 2; // Not allowed
JavaScript has dynamic types. This means that the same variable can be used to hold different data types:
Example
let x; // Now x is undefined
x = 5; // Now x is a Number
x = "John"; // Now x is a String
A string (or a text string) is a series of characters like "John Doe". Strings are written with quotes. You can
use single or double quotes:
Example:
The JavaScript method toString() converts an array to a string of (comma separated) array values.
Array indexes are zero-based, which means the first item is [0], second is [1], and so on. JavaScript objects
are written with curly braces {}. Object properties are written as name:value pairs, separated by commas.
The object (person) in the example above has 4 properties: firstName, lastName, age, and eyeColor.
You can use the JavaScript typeof operator to find the type of a JavaScript variable. The typeof operator
returns the type of a variable or an expression:
The code inside the function will execute when "something" invokes (calls) the function:
You can reuse code: Define the code once, and use it many times. You can use the same code
many times with different arguments, to produce different results.
Variables declared within a JavaScript function, become LOCAL to the function. Local variables can
only be accessed from within the function. Since local variables are only recognized inside their
functions, variables with the same name can be used in different functions. Local variables are
created when a function starts, and deleted when the function is completed.
The following Example illustrates the use of all the string methods:
<html>
<head>
<title></title>
</head>
<body>
<p id="str"></p>
<script>
let n="Software Engineering";
[Link]("str").innerHTML = [Link](0,10);
[Link]("str").innerHTML = [Link](10);
[Link]("str").innerHTML = [Link](0,10); //The difference is that start and end values
// less than 0 are treated as 0 in substring()
let text = "Please visit Wachemo!";
let newText = [Link]("Wachemo", "Hossana");
[Link]("str").innerHTML = newText;
[Link]("str").innerHTML = [Link]();
[Link]("str").innerHTML = [Link]();
[Link]("str").innerHTML = "Hello".concat(" ","World");
[Link]("str").innerHTML = " Hellow ".trim(); // removes white space
[Link]("str").innerHTML = "5".padStart(4,"x");
[Link]("str").innerHTML = "software".charAt(3);
[Link]("str").innerHTML = "software".charCodeAt(3);
</script>
</body>
</html>
Syntax:
if (condition) {
// block of code to be executed if the condition is true
}
Example:
<!DOCTYPE html>
<html>
<body>
<p>Display "Good day!" if the hour is less than 18:00:</p>
<p id="demo">Good Evening!</p>
<script>
if (new Date().getHours() < 18) {
[Link]("demo").innerHTML = "Good day!";
}
</script>
</body>
</html>
Use the else statement to specify a block of code to be executed if the condition is false.
if (condition) {
// block of code to be executed if the condition is true
} else {
// block of code to be executed if the condition is false
}
Example:
<script>
const hour = new Date().getHours();
let greeting;
if (hour < 18) {
greeting = "Good day";
} else {
greeting = "Good evening";
}
[Link]("demo").innerHTML = greeting;
</script>
The switch statement is used to perform different actions based on different conditions. Use the
switch statement to select one of many code blocks to be executed. The switch expression is
evaluated once. The value of the expression is compared with the values of each case. If there is a
match, the associated block of code is executed. If there is no match, the default code block is
executed.
o Example
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript switch</h2>
<p id="demo"></p>
<script>
let day;
switch (new Date().getDay()) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
}
[Link]("demo").innerHTML = "Today is " + day;
</script>
</body>
</html>
o The JavaScript for in statement can also loop over the properties of an Array:
<!DOCTYPE html>
<html>
<body>
<script>
const numbers = [45, 4, 9, 16, 25];
[Link](myFunction);
function myFunction(v) {
[Link](v);
}
</script>
</body>
</html>
The while loop statement is simpler than the for loop. It consists of a condition and block
statement. The condition is evaluated before each pass through the loop. If the condition is true
then it executes block statement.
The Syntax is:
while (condition)
{
statements
}
<html>
<head>
<title>JS while</title>
</head>
<body>
<script>
let i=0;
while(i<6){
[Link](i);
[Link]("</br>");
i++;
}
</script>
</body>
</html>
The do...while loop is much like a while loop. It will repeat the loop until the specified condition is
false. This loop will always be executed at least once, even if the condition is false, because the
block of statements is executed before the condition is tested. In this loop statement, curly braces
are optional.
Example:
<html>
<head>
<title>JS dowhile</title>
</head>
<body>
<script>
let i=0;
do{
[Link](i);
[Link]("</br>");
i++;
} while(i<6);
</script>
</body>
</html>
Break statement is used to exit from the innermost loop, switch statement, or from the statement
named by label. It terminates the current loop and transfers control to the statement following
the terminated loop. The continue statement skips the statement following it and executes the
loop with next iteration. It is used along with an if statement inside while, do-while, for, or label
statements. The continue statement does not terminate the loop. Instead, in a while loop, it jumps
back to the condition and in a for loop, it jumps to the update expression.
<html>
<head>
<title>JS break continue</title>
</head>
<body>
<script>
for(let i=0;i<=10;i++){
if(i==4)
//continue;
break;
[Link](i);
[Link]("<br>");
}
</script>
</body>
</html>
4.16. JavaScript WITH statement
With statement saves a lot of typing when properties of same object have to be accessed. For example, it
is common to work with deeply nested object hierarchies.
Example:
<html>
<head>
<title>WITH statement </title>
</head>
<body>
<script>
with(document){
write("Writing using with");
}
</script>
</body>
</html>
4.17. JavaScript String Search
JavaScript String indexOf()
The indexOf() method returns the index (position) the first occurrence of a string in a string.
JavaScript counts positions from zero. 0 is the first position in a string, 1 is the second, 2 is the
third, ...
JavaScript String lastIndexOf()
The lastIndexOf() method returns the index of the last occurrence of a specified text in a string.
Both indexOf(), and lastIndexOf() return -1 if the text is not found. Both methods accept a second
parameter as the starting position for the search. The lastIndexOf() methods searches backwards
(from the end to the beginning), meaning: if the second parameter is 15, the search starts at
position 15, and searches to the beginning of the string.
JavaScript String search()
The search() method searches a string for a string (or a regular expression) and returns the
position of the match. The search() method cannot take a second start position argument whereas
the indexOf() method cannot take powerful search values (regular expressions).
JavaScript String match()
The match() method returns an array containing the results of matching a string against a string
(or a regular expression).
JavaScript String startsWith()
The startsWith() method returns true if a string begins with a specified value. Otherwise it returns
false:
JavaScript String endsWith()
The endsWith() method returns true if a string ends with a specified value. Otherwise it returns
false.
Example:
<p id="demo"></p>
<script>
let text = "Please LOCATE where 'Locate' occurs!";
let findex = [Link]("locate");
let lindex = [Link]("locate");
let lindex2=[Link]("locate",5);
let indexs=[Link]("locate");
let indexs2=[Link](/locate/);
// g indicates all possible matches. i indicates case insensetive
const myArr = [Link](/oc/gi);
let swith = [Link]("Please");
let ewith = [Link]("occurs");
//[Link]("demo").innerHTML = lindex;
//[Link]("demo").innerHTML = lindex;
//[Link]("demo").innerHTML = indexs;
//[Link]("demo").innerHTML = indexs2;
//[Link]("demo").innerHTML = [Link] + " " + myArr;
//[Link]("demo").innerHTML = swith;
//[Link]("demo").innerHTML = ewith;
</script>
Example:
<p id="demo"></p>
<script>
let x = 123.123;
//[Link]("demo").innerHTML = [Link]();
//[Link]("demo").innerHTML = [Link]();
//[Link]("demo").innerHTML = [Link]();
//[Link]("demo").innerHTML = [Link](4);
//[Link]("demo").innerHTML = [Link](2);
//[Link]("demo").innerHTML = Number("10");
//[Link]("demo").innerHTML = [Link]();
let d = new Date("1970-01-02");
[Link]("demo").innerHTML = Number(d);
</script>
4.19. JavaScript Array Methods
The JavaScript method toString() converts an array to a string of (comma separated) array values.
The join() method also joins all array elements into a string. It behaves just like toString(), but in
addition you can specify the separator:
When you work with arrays, it is easy to remove elements and add new elements. This is what
popping and pushing is. Popping items out of an array, or pushing items into an array.
The pop() method removes the last element from an array.
const fruits = ["Banana", "Orange", "Apple", "Mango"];
[Link]();
The push() method adds a new element to an array (at the end):
Shifting is equivalent to popping, but working on the first element instead of the last.
The concat() method creates a new array by merging (concatenating) existing arrays. The concat()
method does not change the existing arrays. It always returns a new array.
const myGirls = ["Cecilie", "Lone"];
const myBoys = ["Emil", "Tobias", "Linus"];
const myChildren = [Link](myBoys);
The flat() method creates a new array with sub-array elements concatenated to a specified depth.
Flattening an array is the process of reducing the dimensionality of an array.
const myArr = [[1,2],[3,4],[5,6]];
const newArr = [Link]();
The splice() method can be used to add new items in to specified index to an array.
const fruits = ["Banana", "Orange", "Apple", "Mango"];
[Link](2, 0, "Lemon", "Kiwi");
The first parameter (2) defines the position where new elements should be added (spliced
in). The second parameter (0) defines how many elements should be removed. The rest of
the parameters ("Lemon" , "Kiwi") define the new elements to be added. The splice()
method returns an array with the deleted items.
The slice() method can take two arguments like slice(1, 3). The method then selects elements from
the start argument, and up to (but not including) the end argument.
const fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
const citrus = [Link](1, 3);
The sort() method sorts an array alphabetically.
new Date() creates a date object with the current date and time:
const d = new Date();
Date Get Methods
Method Description
getFullYear() Get year as a four digit number (yyyy)
getMonth() Get month as a number (0-11)
getDate() Get day as a number (1-31)
getDay() Get weekday as a number (0-6)
getHours() Get hour (0-23)
getMinutes() Get minute (0-59)
getSeconds() Get second (0-59)
getMilliseconds() Get millisecond (0-999)
getTime() Get time (milliseconds since January 1, 1970)
class ClassName {
constructor() { ... }
}
class Car {
constructor(name, year) {
[Link] = name;
[Link] = year;
}
}
A JavaScript class is not an object. It is a template for JavaScript objects. The example above creates a
class named "Car". The class has two initial properties: "name" and "year".
When you have a class, you can use the class to create objects:
The example above uses the Car class to create two Car objects. The constructor method is called
automatically when a new object is created. The constructor method is a special method. It has to have
the exact name "constructor". It is executed automatically when a new object is created It is used to
initialize object properties. If you do not define a constructor method, JavaScript will add an empty
constructor method.
Class methods are created with the same syntax as object methods. Use the keyword class to create a
class. Always add a constructor() method. Then add any number of methods.