Top Banner
JavaScript for Java Developers Trainer: Igor Khotin Contacts: [email protected]
54

WDB005.1 - JavaScript for Java Developers (Lecture 1)

Jul 03, 2015

Download

Software

Igor Khotin

Slides from our series of lectures on JavaScript for Java Developers.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: WDB005.1 - JavaScript for Java Developers (Lecture 1)

JavaScript for Java Developers

Trainer: Igor KhotinContacts: [email protected]

Page 2: WDB005.1 - JavaScript for Java Developers (Lecture 1)

1990 – World Wide Web1990 – World Wide Web

Page 3: WDB005.1 - JavaScript for Java Developers (Lecture 1)

1993 – NCSA Mosaic1993 – NCSA Mosaic

Page 4: WDB005.1 - JavaScript for Java Developers (Lecture 1)

1994 - Netscape Navigator1994 - Netscape Navigator

Page 5: WDB005.1 - JavaScript for Java Developers (Lecture 1)

1995 – Sun Java1995 – Sun Java

Page 6: WDB005.1 - JavaScript for Java Developers (Lecture 1)

JavaScript Origins – LiveScriptJavaScript Origins – LiveScript

Interpreted scripting languageSimple enough for beginnersDialect of SchemeSelf-inspired prototype modelHyperCard event modelJava syntax

Brendan Eich

Page 7: WDB005.1 - JavaScript for Java Developers (Lecture 1)

JavaScript Origins – LiveScriptJavaScript Origins – LiveScript

Interpreted scripting languageSimple enough for beginnersDialect of SchemeSelf-inspired prototype modelHyperCard event modelJava syntax

Brendan Eich

Implemented in 10 days

Page 8: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Netscape – Sun dealNetscape – Sun deal

&

Page 9: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Java Applets for appsJava Applets for apps

&

Page 10: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Simple script for web designersSimple script for web designers

&

Script?

Page 11: WDB005.1 - JavaScript for Java Developers (Lecture 1)

1995 - JavaScript Released1995 - JavaScript Released

&

Page 12: WDB005.1 - JavaScript for Java Developers (Lecture 1)

1995 - JavaScript Released1995 - JavaScript Released

&

Page 13: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Internet ExplorerInternet Explorer

Page 14: WDB005.1 - JavaScript for Java Developers (Lecture 1)

2005 - AJAX2005 - AJAX

Page 15: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Today – The Most Popular Client PlatformToday – The Most Popular Client Platform

Page 16: WDB005.1 - JavaScript for Java Developers (Lecture 1)

In Fact – The Only Option on Web ClientIn Fact – The Only Option on Web Client

Page 17: WDB005.1 - JavaScript for Java Developers (Lecture 1)

New fast engines – Google V8New fast engines – Google V8

Page 18: WDB005.1 - JavaScript for Java Developers (Lecture 1)

JavaScript “strict mode”JavaScript “strict mode”

Page 19: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Mozilla RhinoMozilla Rhino

JavaScript engine shipped with JRE (version 6 and higher)

Page 20: WDB005.1 - JavaScript for Java Developers (Lecture 1)

NashornNashorn

Much faster JavaScript engine in JRE 8

Page 21: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Server Apps with Node.jsServer Apps with Node.js

JavaScript server platformbased on Google V8 engine

Page 22: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Desktop Apps with Node-WebkitDesktop Apps with Node-Webkit

Page 23: WDB005.1 - JavaScript for Java Developers (Lecture 1)

How Developers Learn JavaScriptHow Developers Learn JavaScript

Hmm... JavaScript...Looks familiar...Let the coding begin!!!

Page 24: WDB005.1 - JavaScript for Java Developers (Lecture 1)

It will make you think...It will make you think...

Page 25: WDB005.1 - JavaScript for Java Developers (Lecture 1)

After a little while...After a little while...

I hate JavaScript!!!

Page 26: WDB005.1 - JavaScript for Java Developers (Lecture 1)

What I really mean...What I really mean...

I don't understand the languageIt has stupid featuresThe DOM model is EVIL

Page 27: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Java & JavaScriptJava & JavaScript

JavaScript != Java

Page 28: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Java & JavaScript – What is SimilarJava & JavaScript – What is Similar

C-like syntaxSandboxedJava keywords are reserved in jsJS follows Java naming conventions

Page 29: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Java & JavaScript – What is SimilarJava & JavaScript – What is Similar

C-like syntaxSandboxedJava keywords are reserved in jsJS follows Java naming conventionsMake harder to see the difference!

Page 30: WDB005.1 - JavaScript for Java Developers (Lecture 1)

JavaScriptJavaScriptDynamic TypingPrototype-basedDynamic ObjectsFirst Class FunctionsClosuresFunction ScopeGlobal Variables

Page 31: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Know and Avoid Bad FeaturesKnow and Avoid Bad Features

Page 32: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Don't Use DOM DirectlyDon't Use DOM Directly

JQueryPrototype...

Page 33: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Global ScopeGlobal Scope

Window object = contextAvoid global variables

Page 34: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Automatic SemicolonsAutomatic Semicolons

return { status: true}

{ status: true }

return{ status: true}

undefined

Page 35: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Automatic SemicolonsAutomatic Semicolons

return { status: true}

{ status: true }

return;{ status: true}

undefined

Page 36: WDB005.1 - JavaScript for Java Developers (Lecture 1)

What is the difference?What is the difference?

console.log('multiline string \Literal');

console.log('multiline string \ Literal');

Page 37: WDB005.1 - JavaScript for Java Developers (Lecture 1)

You can't see itYou can't see it

console.log('multiline string \Literal');

console.log('multiline string \_ Literal'); ^

Page 38: WDB005.1 - JavaScript for Java Developers (Lecture 1)

===='' == '0' // false0 == '' // true0 == '0' // true

false == 'false' // falsefalse == '0' // true

false == undefined // falsefalse == null // falsenull == undefined // true

' \t\r\n ' == 0 // true

Page 39: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Use === and !== insteadUse === and !== instead'' === '0' // false0 === '' // false0 === '0' // false

false === 'false' // falsefalse === '0' // false

false === undefined // falsefalse === null // falsenull === undefined // false

' \t\r\n ' === 0 // false

Page 40: WDB005.1 - JavaScript for Java Developers (Lecture 1)

undefined valuesundefined values

value == null

Page 41: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Use === and !== insteadUse === and !== instead

value == nullvalue === undefined

Page 42: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Only floating point numbersOnly floating point numbers

0.3 - 0.1 !== 0.2

Page 43: WDB005.1 - JavaScript for Java Developers (Lecture 1)

typeoftypeof

typeof 0.2 // 'number'typeof {} // 'object'typeof [] // 'object'typeof null // 'object' typeof NaN // 'number'

Page 44: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Function ScopeFunction Scope

function checkScope() { { var foo = 42; } // foo is still visible!}

Page 45: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Use the Power of Good FeaturesUse the Power of Good Features

Page 46: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Weak TypingWeak TypingVariables are containers that could store everything

Page 47: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Objects as Hash TablesObjects as Hash Tablesfunction Person(name) { this._name = name;

this.getName = function() { return this._name; };}

var person = new Person("John");person.age = 27;person["city"] = "London"

Page 48: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Objects Literals, eval() and JSONObjects Literals, eval() and JSON

var myCar = { color: "yellow", wheels: 4, engine: { cylinders: 4, size: 2.0 }};

Page 49: WDB005.1 - JavaScript for Java Developers (Lecture 1)

First Value FunctionsFirst Value Functionsvar plus = function(x,y){ return x + y };var minus = function(x,y){ return x - y };var operations = { '+': plus, '-': minus};

var calculate = function(x, y, operation){ return operations[operation](x, y);}calculate(38, 4, '+');calculate(47, 3, '-');

Page 50: WDB005.1 - JavaScript for Java Developers (Lecture 1)

ClosuresClosures

function add(value1) { return function doAdd(value2) { return value1 + value2; };}

var increment = add(1);var foo = increment(2);// foo equals 3

Page 51: WDB005.1 - JavaScript for Java Developers (Lecture 1)

PrototypesPrototypesvar Point = function(x) { this.x = x; return this;};

Point.prototype = { x: 0, draw: function() { … }};

p1 = new Point(10);p2 = new Point(15);

Page 52: WDB005.1 - JavaScript for Java Developers (Lecture 1)

this as function contextthis as function contextfunction bar() { alert(this);}bar(); // global

var foo = { baz: function() { alert(this); }}foo.baz(); // foo

Page 53: WDB005.1 - JavaScript for Java Developers (Lecture 1)

ResourcesJavaScript – The Good PartsDouglas Crockford

JavaScript PatternsStoyan Stefanov

Page 54: WDB005.1 - JavaScript for Java Developers (Lecture 1)

Questions