JavaScript: Introduction, Types
Transcript of JavaScript: Introduction, Types
![Page 1: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/1.jpg)
Computer Science and Engineering College of Engineering The Ohio State University
JavaScript:Introduction, Types
Lecture 22
![Page 2: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/2.jpg)
Computer Science and Engineering The Ohio State University
History Developed by Netscape “LiveScript”, then renamed JavaScript Nothing to do with Java!
Motivation: client-side execution in browser Interpretted
Standardized by ECMA (“ECMAScript”) Big update v6 in 2015, ie ES6 (aka ES15) Now annual updates, every June After ES6, named with year (eg ES20)
Has become popular outside of browsers e.g. Node.js
Translation target for other languages: Syntax: CoffeeScript Static types: Dart (Google), TypeScript (MS)
![Page 3: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/3.jpg)
Computer Science and Engineering The Ohio State University
Client-Side Execution
Request
GET /news/index.php HTTP/1.1Host: www.osu.eduUser-Agent: Mozilla/5.0 (X11; Ubuntu;…etc
<!DOCTYPE html><html lang="en"><head><title>My Page</title><meta charset="utf-8" />…
![Page 4: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/4.jpg)
Computer Science and Engineering The Ohio State University
Client-Side Execution<!DOCTYPE html>
<html lang="en">
<head>
<title>Something Short and Sweet</title>
<meta charset="utf-8" />
</head>
<body>
<p>
Hello <a href="planet.html">World</a>!
<br />
<img src="globe.png" alt="a globe"/>
</p>
</body>
</html>
![Page 5: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/5.jpg)
Computer Science and Engineering The Ohio State University
Client-Side Execution<!DOCTYPE html>
<html lang="en">
<head>
<title>Something Short and Sweet</title>
<meta charset="utf-8" />
<script>
window.alert("Annoying!");
</script>
</head>
<body>
<p>
Hello <a href="planet.html">World</a>!
<br />
<img src="globe.png" alt="a globe"/>
</p>
</body>
</html>
![Page 6: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/6.jpg)
Computer Science and Engineering The Ohio State University
Including Scripts Head: executed before body displays Script (source) can be explicitly included
<script>
console.info("hi");
...
</script>
Script can be linked in from external file<script src="MyProgram.js"></script>
Recall: linking to CSS Inline: executed as body is displayed Browser blocks while downloading Common advice: put scripts at end of body Modern advice: use <script src="…" async>
![Page 7: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/7.jpg)
Computer Science and Engineering The Ohio State University
Async/defer Downloading
async
defer
![Page 8: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/8.jpg)
Computer Science and Engineering The Ohio State University
Demo
Simple “hello world” (page1.html) HTML file containing JavaScript Body is empty, script writes HTML output Browser displays result
Examining result with dev tools Sources: see JavaScript program Place breakpoints and reload
Console: see console output
![Page 9: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/9.jpg)
Computer Science and Engineering The Ohio State University
Some Objects Provided Implicitly
Some objects are created implicitly by the execution environment (browser)
Document object (document) document.writeln() puts output in body
Window object (window) Refers to browser's display window Alert method pops up a dialogue
window.alert("Say \"cheese\"!");
Prompt method pops up a dialoguename = window.prompt("Enter name");
![Page 10: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/10.jpg)
Computer Science and Engineering The Ohio State University
Demo with Popups
See: codepen.io/cse3901/pen/BYqqPb Alert window Prompt window Console output (info, warn, error)
Notice: HTML body is empty Settings > Auto-update preview (Off)
![Page 11: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/11.jpg)
Computer Science and Engineering The Ohio State University
Familiar (Java) Minor Syntax
Statement separator ; Wrinkle: ;'s are optional! Implicitly automatically inserted But clearer and safer to include explicitly
Statement blocks {…} Parentheses in expressions (…) Comments // and /*…*/
![Page 12: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/12.jpg)
Computer Science and Engineering The Ohio State University
Familiar (Java) Operators
Arithmetic (numbers are floats) + - * / %
Wrinkles: No diff in / between ints and floats! % works on floats!
Relational < > <= >=
== !=
Wrinkle: === !== Logical && || !
![Page 13: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/13.jpg)
Computer Science and Engineering The Ohio State University
Familiar (Java) Statements Assignment =
+= -= *= /= %=
++ -- (pre and post) Conditionals if (…), if (…) … else switch (c)
case 'a': … case 'b': … default;
Iteration while (…), do…while(…) for (…;…;…)
break, continue
![Page 14: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/14.jpg)
Computer Science and Engineering The Ohio State University
Primitive vs Reference Types
Distinction is similar to Java A variable is a “slot” in memory A variable can be primitive The slot holds the value itself Boolean, number, string, (null, undefined) Since ECMAScript 2015 (ES6): symbols
A variable can be a reference The slot holds a pointer to the value Arrays and objects (including functions!)
![Page 15: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/15.jpg)
Computer Science and Engineering The Ohio State University
Primitive vs Reference Types
34.2 "hi"
a b c d
4
0
-300
3.14
width: 12height: 15color: "blue"
![Page 16: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/16.jpg)
Computer Science and Engineering The Ohio State University
Primitives: Checking Equalitylet a = 5;
let b = 5;
let c = 7;
if (a == b)… //=> true, equal slots
if (a == c)… //=> false
let x = "hello";
let y = "hello";
if (x == y)… //=> true! cf. Java
![Page 17: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/17.jpg)
Computer Science and Engineering The Ohio State University
Primitives: Assignment is Copylet a = 5;
let b = a; // copy contents of slot
b++;
if (a == 5)… //=> true, a unchanged
![Page 18: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/18.jpg)
Computer Science and Engineering The Ohio State University
Assignment is Copy (of Slot)let a = 5;
let b = a;
b++;
if (a == 5)…
5
a
5 5
a b
5 6
a b
![Page 19: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/19.jpg)
Computer Science and Engineering The Ohio State University
Primitives: Argument Passing
function inc (param) {
param++;
}
let a = 5;
inc(a); // copy contents of slot
if (a == 5)… //=> true
![Page 20: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/20.jpg)
Computer Science and Engineering The Ohio State University
References: Equality/Assignment
let a = {x:1, y:4}; // a new object
let b = {x:1, y:4}; // a new object
if (a == b)… //=> false
a = b; // copy contents of slot
if (a == b)… //=> true
![Page 21: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/21.jpg)
Computer Science and Engineering The Ohio State University
Assignment is Copy (of Slot)
a b
x: 1y: 4
a b
x: 1y: 4
x: 1y: 4
a = b;
x: 1y: 4
a != b a == b
![Page 22: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/22.jpg)
Computer Science and Engineering The Ohio State University
References: Argument Passing
function inc (param) {
param.x++;
}
let a = {x: 1, y: 4};
inc(a); // copy contents of slot
if (a.x == 2)… //=> true
![Page 23: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/23.jpg)
Computer Science and Engineering The Ohio State University
References: Argument Passing
function inc (param) {
param = {x: 2, y: 7};
}
let a = {x: 1, y: 4};
inc(a); // copy contents of slot
if (a.x == 2) //=> false
![Page 24: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/24.jpg)
Computer Science and Engineering The Ohio State University
Wrinkle: == vs === Recall + operator in Java Concatenation between strings Addition between numbers 3 + "4" also works! Results in "34"
Similarly, JavaScript == (!=) tries to make types match 3 == "3" is true!
To prevent implicit type conversion, use === (!==) 3 === "3" is false
More on type conversion later…
![Page 25: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/25.jpg)
Computer Science and Engineering The Ohio State University
Demo: Iteration
See: codepen.io/cse3901/pen/Jpmejp Table generated by Javascript Prompt for initial value Calculate interest series Print out a row of table for each year
![Page 26: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/26.jpg)
Computer Science and Engineering The Ohio State University
Static vs Dynamic Types
Static: known at compile time e.g., C, C++, Java, Ada
int x
char[] a
FluffyCloud t
void* d
Dynamic: known only at run time e.g., Python, PHP, Ruby, JavaScript
let x
let a
let t
let d
![Page 27: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/27.jpg)
Computer Science and Engineering The Ohio State University
Static Types
34.2 "hi"
a b c d
4
0
-300
3.14
width: 12height: 15color: "blue"
number string num[] Shape
Rectangle
num[]
![Page 28: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/28.jpg)
Computer Science and Engineering The Ohio State University
Dynamic Types
34.2 "hi"
a b c d
4
0
-300
3.14
width: 12height: 15color: "blue"
let let let let
[]
Object
![Page 29: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/29.jpg)
Computer Science and Engineering The Ohio State University
Function Signatures Statically typed
String parse(char[] s, int i) {… return e;}
out = parse(t, x);
Parameter types (i.e. s and i) are declared Return type (i.e. of parse) is declared The compiler checks conformance of
(Declared) types of arguments (t, x) (Declared) type of return expression (e) (Declared) type of expression using parse (out)
Dynamically typedfunction parse(s, i) { … }
out = parse(t, x)
You are on your own!
![Page 30: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/30.jpg)
Computer Science and Engineering The Ohio State University
Static Types Dynamic Types
Changing Types at Run-time
//a is undefined
String a;
//a is null string
a = "hi;
//compile-time err
a = "hi";
a = 3;
//compile-time err
a.push();
//compile-time err
//a is undeclared
let a;
//a is undefined
a = "hi;
//load-time error
a = "hi";
a = 3;
//a is a number
a.push();
//run-time error
![Page 31: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/31.jpg)
Computer Science and Engineering The Ohio State University
Resources MDN (Mozilla Developer Network) developer.mozilla.org/docs/JavaScript
codepen.io, jsfiddle.net HTML, CSS, Javascript result
REPL In VM, at console:$ node In a browser: repl.it/languages/javascript
Class web site (under Resources) Style guides (Airbnb, Google) Books, available online
JavaScript: The Definitive Guide (Flanagan) Eloquent JavaScript (Haverbeke)
![Page 32: JavaScript: Introduction, Types](https://reader033.fdocuments.in/reader033/viewer/2022052507/628b5d24dee31325212f7be0/html5/thumbnails/32.jpg)
Computer Science and Engineering The Ohio State University
Summary Executes at client-side, in browser Interpreted (not compiled)
Basic syntax: operators, statements Objects: document, window… Types Primitives: boolean, number, string, null,
undefined References: arrays, objects (& functions)
Working with primitives and references Checking equality Assignment Parameter passing
Dynamic types (vs static types)