JavaScript in More Detail

Slides:



Advertisements
Similar presentations
JavaScript I. JavaScript is an object oriented programming language used to add interactivity to web pages. Different from Java, even though bears some.
Advertisements

Martin Kruliš by Martin Kruliš (v1.0)1.
CS 4800 By Brandon Andrews.  Specifications  Goals  Applications  Design Steps  Testing.
Javascript Client-side scripting. Up to now  We've seen a little about how to control  content with HTML  presentation with CSS  Javascript is a language.
OOP in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Taking JavaScript Seriously IS NOT THE WORST IDEA.
1 JavaScript. 2 What’s wrong with JavaScript? A very powerful language, yet –Often hated –Browser inconsistencies –Misunderstood –Developers find it painful.
CMPS 211 JavaScript Topic 1 JavaScript Syntax. 2Outline Goals and Objectives Goals and Objectives Chapter Headlines Chapter Headlines Introduction Introduction.
Martin Kruliš by Martin Kruliš (v1.0)1.
4.4 JavaScript (JS) Deitel Ch. 7, 8, 9, JavaScript & Java: Similarities JS (JavaScript) is case-sensitive Operators –arithmetic: unary +, unary.
Martin Kruliš by Martin Kruliš (v1.0)1.
Julian on JavaScript: Functions Julian M Bucknall, CTO.
Basic Scheme February 8, 2007 Compound expressions Rules of evaluation Creating procedures by capturing common patterns.
1/33 Basic Scheme February 8, 2007 Compound expressions Rules of evaluation Creating procedures by capturing common patterns.
Rich Internet Applications 2. Core JavaScript. The importance of JavaScript Many choices open to the developer for server-side Can choose server technology.
JavaScript and Ajax (Control Structures) Week 4 Web site:
Martin Kruliš by Martin Kruliš (v1.0)1.
UMass Lowell Computer Science Java and Distributed Computing Prof. Karen Daniels Fall, 2000 Lecture 10 Java Fundamentals Objects/ClassesMethods.
Martin Kruliš by Martin Kruliš (v1.1)1.
CSE 332: C++ Exceptions Motivation for C++ Exceptions Void Number:: operator/= (const double denom) { if (denom == 0.0) { // what to do here? } m_value.
LECTURE 10 Semantic Analysis. REVIEW So far, we’ve covered the following: Compilation methods: compilation vs. interpretation. The overall compilation.
EGR 2261 Unit 13 Classes Read Malik, Chapter 10.
Topic: Classes and Objects
Classes C++ representation of an object
Programming with ANSI C ++
User-Written Functions
Basic Scheme February 8, 2007 Compound expressions Rules of evaluation
Chapter 4 Client-Side Programming: the JavaScript Language
Advance OOP in PHP.
Java Primer 1: Types, Classes and Operators
Game-Changing Features in ES2015
Representation, Syntax, Paradigms, Types
JavaScript Martin Kruliš by Martin Kruliš (v1.2)
JAVASCRIPT INTERVIEW QUESTIONS & ANSWERS.
CNIT 133 Interactive Web Pags – JavaScript and AJAX
Modern JavaScript Develop And Design
SEEM4570 Tutorial 05: JavaScript as OOP
Scope, Objects, Strings, Numbers
JavaScript Syntax and Semantics
Functional Programming with Java
Chapter 9 Inheritance and Polymorphism
Java Programming Language
Built-In (a.k.a. Native) Types in C++
Operator Overloading; String and Array Objects
Chapter 9 Objects and Classes
Representation, Syntax, Paradigms, Types
Dynamic Scoping Lazy Evaluation
Variables Title slide variables.
Constructors and destructors
CS5220 Advanced Topics in Web Programming JavaScript Basics
University of Kurdistan
Representation, Syntax, Paradigms, Types
Object-Oriented Programming in PHP
Python Primer 1: Types and Operators
CISC/CMPE320 - Prof. McLeod
CS5220 Advanced Topics in Web Programming Node.js Basics
Representation, Syntax, Paradigms, Types
Java Programming Language
CS410 – Software Engineering Lecture #5: C++ Basics III
Classes C++ representation of an object
Chap 2. Identifiers, Keywords, and Types
Introduction to the Lab
Common Lisp II.
CS3220 Web and Internet Programming JavaScript Basics
Modern JavaScript (since ES6 Harmony)
JavaScript Internals and OOP Concepts
C++ Object Oriented 1.
SPL – PS1 Introduction to C++.
Presentation transcript:

JavaScript in More Detail Martin Kruliš https://img-9gag-fun.9cache.com/photo/awAK691_460s.jpg https://i.pinimg.com/originals/64/e8/48/64e84853aaa2a974fc88b1a4c614a7f2.jpg by Martin Kruliš (v1.4) 8.11.2018

Revision JavaScript Values vs variables Available data types Functions Weakly-typed, dynamic, C-like, object-oriented, prototyping, functional language Values vs variables Variable type is determined by the value Available data types number, string, boolean, object, function, and undefined Functions 1st class citizens (declare function = create value) Objects Dynamic name-value collections by Martin Kruliš (v1.4) 8.11.2018

JavaScript Built-ins General-purpose Object “Classes” Wrappers for basic types Number, String, Boolean, Object, Function Basic primitives (string, boolean, and number) are automatically converted to their respective wrappers E.g., when a method is invoked upon them Provide additional functionality Array – object wrapper for “traditional” arrays Date – time and date information Iterator – implements iterator pattern RegExp – regular expression by Martin Kruliš (v1.4) 8.11.2018

JavaScript Built-ins Non-constructor Functions encodeURI(str) – encode string for URI decodeURI(str) – decode URI to normal string parseInt(str, rdx) – parse textual representation of an integer of given radix parseFloat(str) – parse textual representation of a floating point number encode(str) – encode non-ascii chars decode(str) – reverse function to encode() eval(str) – to be reviewed later… by Martin Kruliš (v1.4) 8.11.2018

Functions Function Scope of Variables var a1; // global scope (obj. window in browser) function foo() { var a2; // local scope of foo() function innerFoo() { var a3; // local scope of innerFoo() function innerInnerFoo() { // I can see a1, a2, and a3 from here … a2 = a1; } We follow the scope chain upwards and find the first variable of the name 'a2'. by Martin Kruliš (v1.4) 8.11.2018

Functions Closure function createAdder(x) { return function(y) { return x + y; } var add3 = createAdder(3); var add7 = createAdder(7); add3(10); // is 13 add7(10); // is 17 The Inner function can see variable x due to scoping rules When the inner function is created, the closure captures value of x == 3 New function have a new closure where x == 7 Example 1 by Martin Kruliš (v1.4) 8.11.2018

Functions Closure Pitfalls function createLinks() { All the links are created in one scope, thus sharing one closure. Closure Pitfalls function createLinks() { for (var i = 1; i <= 5; ++i) { var link = document.createElement('a'); link.onclick = function(){ alert(i); }; link.textContent = "Link " + i; document.body.appendChild(link); } document.onload = createLinks; Always prints “6”. The value of i is 6, when the scope is closed. by Martin Kruliš (v1.4) 8.11.2018

Functions Closure Pitfalls function fmaddCreate(cfg) { Objects are passed by reference Closure Pitfalls function fmaddCreate(cfg) { return function(x) { return cfg.mul * x + cfg.add; } var config = { mul: 2, add: 3 }; var fmadd = fmaddCreate(config); fmadd(42); // is 87 config.mul = 3; fmadd(42); // is 129 Object modification is visible in closure by Martin Kruliš (v1.4) 8.11.2018

Members may be added dynamically. Objects - Revision Objects Objects are unordered name-value collections All members are public var myObject = { foo: 10, bar: function() { ... } }; myObject.bar(); myObject.anotherFoo = 100; Creates simple object with two members (foo and bar), where foo is a Number and bar is Function (i.e., in some sense a method). Members may be added dynamically. by Martin Kruliš (v1.4) 8.11.2018

Objects Classes There are no classes! But we have prototypes What do you mean? No classes?! Wait for ECMA Script 6! Classes There are no classes! But we have prototypes [[Prototype]] foo bar name printName() Object.prototype NamedObject myObject Classes were presented in the next version of the language (ECMAScript 6). More details in the advanced lecture (in summer term). Searches up the prototype chain, looks for the first printName property myObject.printName(); myObject.spam = 42; Creates new property in myObject (no prototype chain traversing) by Martin Kruliš (v1.4) 8.11.2018

Prototyping Prototyping instead of Classes var CircleProto = { radius: 0, circumference: function() { return 2 * Math.PI * this.radius; } var circle = Object.create(CircleProto); circle.radius = 42; console.log(circle.circumference()); Prototype takes the role of a class Creates new empty object which has CircleProto as prototype Logs 263.89378290154264 by Martin Kruliš (v1.4) 8.11.2018

Prototyping Classes vs Prototypes Class-based Language JavaScript foo Object.prototype myObj MySubclass MyClass Class-based Language foo() bar() JavaScript var MyClass foo() [[Prototype]] bar var MySubclass bar() [[Prototype]] obj properties var myObj Example 2 by Martin Kruliš (v1.4) 8.11.2018

this refers to global environment Keyword this Keyword this Implicitly declared variable which has different values in different contexts Global context this refers to the script environment (e.g., window) Function context this value depends on how the function was called obj.foo(); var foo = obj.foo; foo(); this refers to obj this refers to global environment by Martin Kruliš (v1.4) 8.11.2018

Object Constructor Object var o = new Object(value); All objects are descendants of an Object Interesting properties create(proto, [props]) – create new object getOwnPropertyNames(obj) – return array of property names that are native to obj getPrototypeOf(obj) – get prototype object of obj preventExtensions(obj) – prevent properties from being added to obj object seal(obj) – prevent adding/removing properties freeze(obj) – prevent any property modifications by Martin Kruliš (v1.4) 8.11.2018

ECMA Script 6 Classes class Circle extends GeometricShape { constructor (x, y, r) { super(x, y); this.r = r; } getArea () { return Math.PI * r * r; const circle = new Circle(10, 20, 5); by Martin Kruliš (v1.4) 8.11.2018

ECMA Script 6 Modules Way to export/import modular values without polluting the global context (avoiding name collisions) // mylib.js export function explain() { return "because 6 x 9"; }; export var universalConst = 42; // an application using mylib.js import * as mylib from "mylib"; console.log(mylib.universalConst + " " + mylib.explain()); // another application using mylib import { explain, universalConst } from "mylib"; console.log(universalConst + " " + explain()); by Martin Kruliš (v1.4) 8.11.2018

When used with object, the properties can be modified ECMA Script 6 Block Scoping var x = 1; // function scope let y = 2; // block scope const z = 3; // constant in block scope Arrow Functions function foo(x) { return x*x; } const foo = x => x*x; When used with object, the properties can be modified Actually, this is not just a shorthand syntax. They are more lightweight and they bind this at the moment of creation. by Martin Kruliš (v1.4) 8.11.2018

ECMA Script 6 Playing with variables and arguments Default parameter values function inc(val, by = 1) { return val + by; } Aggregation of remaining arguments function merge(al, a2, ...restArrays) {} Spread collection elements as arguments var coords = [ 1, 2 ,3 ]; point.moveBy(...coords); // moveBy(1, 2, 3); var str = "bar"; var chars = [ "f", "o", "o", ...str ]; // b, a, r by Martin Kruliš (v1.4) 8.11.2018

ECMA Script 6 Playing with variables and arguments Array matching var list = [ 1, 2, 3 ]; var [ x, y, z ] = list; // var x=1, y=2, z=3 [ z, x, y ] = [ x, y, z ]; // rotate values x,y,z Object matching var { x, y, z } = get3Dpoint(); var { x: y, y: x, attrs: { depth: z } } = get2Dpoint(); Context argument matching function avgFirst2([a, b]) { return (a + b) / 2; } function distanceTo({x, y, z = 1}) { … } by Martin Kruliš (v1.4) 8.11.2018

Functional Approach Shift in Paradigm JavaScript is leaning steadily towards functional programming paradigm const data = [ 1, 2, 3, 4, 5, 6 ]; for (let i = 0; i < data.length; ++i) { if (data[i] % 2 !== 0) continue; let x = data[i] * data[i]; console.log(x); } by Martin Kruliš (v1.4) 8.11.2018

Functional Approach Shift in Paradigm JavaScript is leaning steadily towards functional programming paradigm const data = [ 1, 2, 3, 4, 5, 6 ]; data.filter(x => x % 2 === 0) .map(x => x * x) .forEach(x => console.log(x)); by Martin Kruliš (v1.4) 8.11.2018

Errors Errors/Exceptions JavaScript is very error-prone language Error usually stops current JavaScript code Error handling is similar to exception catching: try { ... secured code ... } catch(err) { ... error handling ... } finally { ... finalization code ... } Can be triggered manually throw something; Regular errors are created by Error constructor Parameter message with human-readable description Multiple catch blocks are allowed: try {} catch(e1 if condition1) { … first handling … } … catch(e) { … default handling … } by Martin Kruliš (v1.4) 8.11.2018

Code Evaluation Explicit Evaluation The eval(code) function The code is JavaScript code represented as string The code is interpreted and its last value is returned eval("3+4"); // returns 7 The eval() should be avoided whenever possible eval("var res = obj." + propName); is equivalent with var res = obj[propName]; Functions as callbacks can be used in many places to avoid explicit eval() call Note that eval() is not considered a good programming practice and it is dedicated for very special cases. However, it is a good example of how dynamic interpret languages are being processed. by Martin Kruliš (v1.4) 8.11.2018

Discussion by Martin Kruliš (v1.4) 8.11.2018