0% found this document useful (0 votes)
3 views27 pages

JavaScript (Part 3)- Type Conversion, Comparison Operators, And Control Structures

This document is a lecture handout on JavaScript, covering topics such as type conversion, comparison operators, and control structures. It explains concepts like type coercion, equality, and various loop constructs in JavaScript. The document also includes examples and explanations of how these concepts work in practice.

Uploaded by

hafiz15061970
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views27 pages

JavaScript (Part 3)- Type Conversion, Comparison Operators, And Control Structures

This document is a lecture handout on JavaScript, covering topics such as type conversion, comparison operators, and control structures. It explains concepts like type coercion, equality, and various loop constructs in JavaScript. The document also includes examples and explanations of how these concepts work in practice.

Uploaded by

hafiz15061970
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

COMP519 Web Programming

Lecture 12: JavaScript (Part 3)


Handouts

Ullrich Hustadt

Department of Computer Science


School of Electrical Engineering, Electronics, and Computer Science
University of Liverpool
Contents
1 Type Conversion
Type Coercion
Type Casting
2 Comparison Operators
Equality
Less and Greater Than
Numbers Revisited: NaN and Infinity
3 Control Structures
Blocks
Conditional statements
Switch statements
While- and Do While-loops
For-loops
Try, throw, catch, finally statements
4 Further Reading
COMP519 Web Programming Lecture 12 Slide L12 – 1
Type Conversion Type Coercion

Type Coercion
• JavaScript automatically converts a value to the appropriate type as
required by the operation applied to the value (type coercion)
5 * "3" // result is 15
5 + "3" // result is "53"
5 && "3" // result is "3"

• The value undefined is converted as follows:

Type Default Type Default Type Default


bool false string ’undefined’ number NaN

undefined || true // result is true


undefined + " -!" // result is " undefined -!"
undefined + 1 // result is NaN

COMP519 Web Programming Lecture 12 Slide L12 – 2


Type Conversion Type Coercion

Type Coercion
When converting to boolean, the following values are considered false:
• the boolean false itself
• the number 0 (zero)
• the empty string, but not the string ’0’
• undefined
• null
• NaN

Every other value is converted to true including


• Infinity
• ’0’
• functions
• objects, in particular, arrays with zero elements

COMP519 Web Programming Lecture 12 Slide L12 – 3


Type Conversion Type Casting

Type Casting
JavaScript provides several ways to explicitly type cast a value
• Apply an identity function of the target type to the value
"12" * 1 ; 12 !!"1" ; true
12 + "" ; "12" !!"0" ; true
false + "" ; "false" !!"" ; false
[12,[3,4]] + "" ; "12,3,4" !!1 ; true
[12,13] * 1 ; NaN
[12] * 1 ; 12

COMP519 Web Programming Lecture 12 Slide L12 – 4


Type Conversion Type Casting

Type Casting
JavaScript provides several ways to explicitly type cast a value
• Wrap a value of a primitive type into an object
; JavaScript has objects Number, String, and Boolean with
unary constructors/wrappers for values of primitive types
(JavaScript does not have classes but prototypical objects)
Number("12") ; 12 Boolean("0") ; true
String(12) ; "12" Boolean(1) ; true
String(false) ; "false" Number(true) ; 1
• Use parser functions parseInt or parseFloat
parseInt("12") ; 12 parseFloat("2.5") ; 2.5
parseInt("2.5") ; 2 parseFloat("2.5e1") ; 25
parseInt("E52") ; NaN parseFloat("E5.2") ; NaN
parseInt(" 42") ; 42 parseFloat(" 4.2") ; 4.2
parseInt("2014Mar") ; 2014 parseFloat("4.2end") ; 4.2

COMP519 Web Programming Lecture 12 Slide L12 – 5


Comparison Operators Equality

Comparison Operators
JavaScript distinguishes between (loose) equality ==
and strict equality ===:
expr1 == expr2 Equal TRUE iff expr1 is equal to expr2
after type coercion
expr1 != expr2 Not equal TRUE iff expr1 is not equal to expr2
after type coercion
• When comparing a number and a string, the string is converted to a
number
• When comparing with a boolean,
the boolean is converted to 1 if true and to 0 if false
• If an object is compared with a number or string, JavaScript uses the
valueOf and toString methods of the objects to produce a primitive
value for the object
• If two objects are compared, then the equality test is true only if both
refer to the same object

COMP519 Web Programming Lecture 12 Slide L12 – 6


Comparison Operators Equality

Comparison Operators
JavaScript distinguishes between (loose) equality ==
and strict equality ===:
expr1 === expr2 Strictly equal TRUE iff expr1 is equal to expr2,
and they are of the same type
expr1 !== expr2 Strictly not TRUE iff expr1 is not equal to expr2,
equal or they are not of the same type

"123" == 123 ; true "123" === 123 ; false


"123" != 123 ; false "123" !== 123 ; true
"1.23e2" == 123 ; true 1.23e2 === 123 ; false
"1.23e2" == "12.3e1" ; false "1.23e2" === "12.3e1" ; false
5 == true ; false 5 === true ; false

COMP519 Web Programming Lecture 12 Slide L12 – 7


Comparison Operators Less and Greater Than

Comparison Operators
JavaScript’s comparison operators also apply type coercion to their
operands and do so following the same rules as equality ==:
expr1 < expr2 Less than true iff expr1 is strictly less than expr2
after type coercion
expr1 > expr2 Greater than true iff expr1 is strictly greater than expr2
after type coercion
expr1 <= expr2 Less than true iff expr1 is less than or equal to expr2
or equal to after type coercion
expr1 >= expr2 Greater than true iff expr1 is greater than or equal to expr2
or equal to after type coercion

’35.5’ > 35 ; true ’35.5’ >= 35 ; true


’ABD’ > ’ABC’ ; true ’ABD’ >= ’ABC’ ; true
’1.23e2’ > ’12.3e1’ ; false ’1.23e2’ >= ’12.3e1’ ; false
"F1" < "G0" ; true "F1" <= "G0" ; true
true > false ; true true >= false ; true
5 > true ; true 5 >= true ; true

COMP519 Web Programming Lecture 12 Slide L12 – 8


Comparison Operators Numbers Revisited: NaN and Infinity

Numbers Revisited: NaN and Infinity


• JavaScript’s number type includes constants
NaN (case sensitive) ‘not a number’
Infinity (case sensitive) ‘infinity’
• The constants NaN and Infinity are used as return values for
applications of mathematical functions that do not return a number
• Math.log(0) returns -Infinity (negative ‘infinity’)
• Math.sqrt(-1) returns NaN (‘not a number’)
• 1/0 returns Infinity (positive ‘infinity’)
• 0/0 returns NaN (‘not a number’)

COMP519 Web Programming Lecture 12 Slide L12 – 9


Comparison Operators Numbers Revisited: NaN and Infinity

Numbers Revisited: NaN and Infinity


• Equality and comparison operators need to be extended to cover
NaN and Infinity:
NaN == NaN ; false NaN === NaN ; false
Infinity == Infinity ; true Infinity === Infinity ; true
NaN == 1 ; false Infinity == 1 ; false
NaN < NaN ; false Infinity < Infinity ; false
1 < Infinity ; true 1 < NaN ; false
Infinity < 1 ; false NaN < 1 ; false
NaN < Infinity ; false Infinity < NaN ; false

; A lot of standard mathematical properties for numbers


do not apply to the number type, e.g.

∀x, y ∈ R : (x < y ) ∨ (x = y ) ∨ (x > y )

; equality cannot be used to check for NaN

COMP519 Web Programming Lecture 12 Slide L12 – 10


Comparison Operators Numbers Revisited: NaN and Infinity

Integers and Floating-point numbers: NaN and Infinity


• JavaScript provides two functions to test whether a value is or is not
NaN, Infinity or -Infinity:
• bool isNaN(value)
returns TRUE iff value is NaN
• bool isFinite(value)
returns TRUE iff value is neither NaN nor Infinity/-Infinity
There is no isInfinite function
• In conversion to a boolean value,
• NaN converts to false
• Infinity converts to true
• In conversion to a string,
• NaN converts to ’NaN’
• Infinity converts to ’Infinity’

COMP519 Web Programming Lecture 12 Slide L12 – 11


Control Structures

Control Structures

JavaScript control structures


• block statements
• conditional statements
• switch statements
• while- and do while-loops
• for-loops
• break and continue
• try, throw, catch finally statements
are syntactically identical to those of Java

COMP519 Web Programming Lecture 12 Slide L12 – 12


Control Structures Blocks

Control structures: block statements


A block statement is a sequence of zero or more statements delimited
by a pair of curly brackets
{
statements
}
• It allows to use multiple statements where JavaScript expects only one
statement
{
var x = 1
var y = x ++
}

COMP519 Web Programming Lecture 12 Slide L12 – 13


Control Structures Conditional statements

Control structures: conditional statements


Conditional statements take the following form in JavaScript:
if ( condition )
statement
else if ( condition )
statement
else
statement
• There are no elsif- or elseif-clauses in JavaScript
• The else-clause is optional but there can be at most one
• Each statement can be a block statement

COMP519 Web Programming Lecture 12 Slide L12 – 14


Control Structures Conditional statements

Control structures: conditional statements


if ( age < 18) {
price = 10;
categ = ’ child ;
} else if ( age >= 65) {
price = 20;
categ = ’ pensioner ’;
} else {
price = 100;
categ = ’ adult ’;
}

JavaScript also supports conditional expressions


condition ? if_true_expr : if_false_expr
y = ( x < 0) ? -1/ x : 1/ x

price = ( age < 18) ? 10 : ( age >= 65) ? 20 : 100


categ = ( age < 18) ? ’ child ’ : ( age >= 65) ? ’ pensioner ’ :
’ adult ’
COMP519 Web Programming Lecture 12 Slide L12 – 15
Control Structures Switch statements

Control structures: switch statement


Switch statements in JavaScript take the same form as in Java:
• there can be arbitrarily many case-clauses
switch ( expr ) {
case expr1 : • the default-clause is optional but there can be
statements at most one
break ;
case expr2 : • expr is evaluated only once and then compared
statements to expr1, expr2, etc using (loose) equality ==
break ;
• once two expressions are found to be equal the
default :
statements corresponing clause is executed
break ; • if none of expr1, expr2, etc are equal to expr,
}
then the default-clause will be executed
• break ‘breaks out’ of the switch statement
• if a clause does not contain a break command,
then execution moves to the next clause

COMP519 Web Programming Lecture 12 Slide L12 – 16


Control Structures Switch statements

Control structures: switch statement


Not every case-clause needs to have associated statements
Example:
switch ( month ) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
days = 31;
break ;
case 4: case 6: case 9: case 11:
days = 30;
break ;
case 2:
days = 28;
break ;
default :
days = 0;
break ;
}

COMP519 Web Programming Lecture 12 Slide L12 – 17


Control Structures While- and Do While-loops

Control Structures: while- and do while-loops


JavaScript offers while-loops and do while-loops
while ( condition )
statement

do
statement
while ( condition )
Example:
// Compute the factorial of a given number
var factorial = 1;
do {
factorial *= number - -
} while ( number > 0)

COMP519 Web Programming Lecture 12 Slide L12 – 18


Control Structures For-loops

Control structures: for-loops


• for-loops in JavaScript take the form
for ( initialisation ; test ; increment )
statement

var factorial = 1
for ( var i = 1; i <= number ; i ++)
factorial *= i

• A for-loop is equivalent to the following while-loop:


initialisation
while ( test ) {
statement
increment
}

for ( var factorial = 1; number ; number - -)


factorial *= number

COMP519 Web Programming Lecture 12 Slide L12 – 19


Control Structures For-loops

Control structures: for-loops


• In JavaScript, initialisation and increment can consist of more
than one statement, separated by commas instead of semicolons
for ( i = 1 , j = 1; j >= 0; i ++ , j - -)
console . log ( i + " * " + j + " = " + i * j )
// Indentation has no ‘ meaning ’ in JavaScript ,
// the next line is not part of the loop !! BAD STYLE !!
console . log (" Outside loop : i = " + i + " j = " + j )
1 * 1 = 1
2 * 0 = 0
Outside loop : i = 3 | j = -1
• Note: Variables declared with var inside a for-loop are still visible
outside
for ( var i = 0; i < 1; i ++)
console . log (" Inside loop : i = " + i )
console . log (" Outside loop : i = " + i )
Inside loop : i = 0
Outside loop : i = 1

COMP519 Web Programming Lecture 12 Slide L12 – 20


Control Structures For-loops

Control Structures: break and continue


• The break command can also be used in while-, do while-, and for-loops
and discontinues the execution of the loop
// Looking for a value x , 0 <x <100 , for which f ( x ) equals 0
x = 1
while ( x < 100) {
if ( f ( x ) == 0) break ;
x ++
}
• The continue command stops the execution of the current iteration of a
loop and moves the execution to the next iteration
for ( x = -2; x <= 2; x ++) {
if ( x == 0) continue ;
console . log ("10 / " + x + " = " + (10/ x ));
}
10 / -2 = -5
10 / -1 = -10
10 / 1 = 10
10 / 2 = 5
COMP519 Web Programming Lecture 12 Slide L12 – 21
Control Structures Try, throw, catch, finally statements

Error handling
• When a JavaScript statement generates an error, an exception is thrown
• Exceptions can also explicitly be thrown via a throw statement
• A try ... catch ... statement allows for error / exception handling
try { statements }
catch ( error ) { statements }
finally { statements }

• Statements in the try block are executed first


• If any statement within the try block throws an exception, control
immediately shifts to the catch block
• error is a variable used to store the error / exception
• Statements in the finally block are executed after try and catch
statements, regardless of whether an exception was thrown or caught
• Curly brackets are necessary even where a block consists of only one
statement
COMP519 Web Programming Lecture 12 Slide L12 – 22
Control Structures Try, throw, catch, finally statements

Error handling
• When a JavaScript statement generates an error, an exception is thrown
• Exceptions can also explicitly be thrown via a throw statement
• A try ... catch ... statement allows for error / exception handling
throw expression

• A throw statement throws (generates) an exception and interrupts the


normal flow of control
• The exception expression can be a string, a number, a boolean or an
object

• try ... catch ... statements can be nested

COMP519 Web Programming Lecture 12 Slide L12 – 23


Control Structures Try, throw, catch, finally statements

Error handling: Example

x = "A"
try {
if ( isNaN ( x )) throw " x is NaN "
y = x . toFixed (2)
} catch ( e ) {
console . log ( ’ Caught : ’ + e )
y = 0
} finally {
console . log ( ’ y = ’,y )
}
Caught TypeError : x . toFixed is not a function
y = 0

COMP519 Web Programming Lecture 12 Slide L12 – 24


Control Structures Try, throw, catch, finally statements

Coding Styles

EAFP (easier to ask for forgiveness than permission)


• Makes the default assumption that code works without error
• Any problems are caught as exceptions
• Code contains a lot of try ... catch ... statements

try { y = x . toFixed (2) } catch ( e ) { y = 0 }

LBYL (look before you leap)


• Before executing a statement that might fail, first check whether the
condition for its success are true, only then proceed
• Code contains a lot of conditional statements

if (( typeof ( x ) == ’ number ’) && isFinite ( x ))


y = x . toFixed (2)
else
y = 0
COMP519 Web Programming Lecture 12 Slide L12 – 25
Further Reading

Revision and Further Reading


• Read
• Chapter 14: Exploring JavaScript
• Chapter 15: Expressions and Control Flow in JavaScript
of R. Nixon: Learning PHP, MySQL & JavaScript:
with jQuery, CSS & HTML5. O’Reilly, 2018.
• Read
• Chapter 3: Language Basics: Data Types
• Chapter 3: Language Basics: Operators
• Chapter 3: Language Basics: Statements
of N. C. Zakas: Professional JavaScript for Web developers.
Wrox Press, 2009.
Harold Cohen Library 518.59.Z21 or
E-book http://library.liv.ac.uk/record=b2238913

COMP519 Web Programming Lecture 12 Slide L12 – 26

You might also like