93
JavaScript for Java Developers Scott Davis,ThirstyHead.com

JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

  • Upload
    others

  • View
    37

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript forJava DevelopersScott Davis, ThirstyHead.com

Page 2: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 3: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

@scottdavis99Scott Davis

Page 4: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

“If this is coffee, please bring me some tea;

If this is tea, please bring me some coffee...”

Abraham Lincoln

Page 5: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Coffee != Tea

Java != JavaScript

Page 6: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript sounds like it has something to do with

Java. It doesn’t.

Apart from some superficial syntactical similarities, they have nothing in common.

Jeremy Keith

Java is to JavaScript as ham is to hamster.

Page 7: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak Typing

Block vs. Function scope

Compiling vs. Minifying

Page 8: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak Typing

Block vs. Function scope

Compiling vs. Minifying

Page 9: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

[In 1990] I was convinced that we needed to build-in a programming language, but the developers, Tim [Berners-Lee], were very much opposed.

The net result is that the programming-vacuum filled itself with the most horrible kluge in the history of computing: JavaScript.

Robert Cailliau(the other father of the WWW)

Page 10: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 11: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

I joined Netscape on 4 April 1995, with the goal of

embedding the Scheme programming language,

or something like it, into Netscape's browser.

Page 12: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 13: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

...from May till December (1995) it was Mocha and then LiveScript.

Then in early December, Netscape and Sun did a license agreement and it became JavaScript.

Brendan Eich

Page 14: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

The big debate inside Netscape therefore became, "Why two languages? Why not just Java?"

The answer was that two languages were required to serve the two mostly-disjoint audiences...

1. the component authors...

2. and the "scripters", amateur or pro, who would write code directly embedded in HTML.

Page 15: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript had to “look like Java” only less so, be Java’s dumb kid brother or

boy-hostage sidekick.

There was some pressure from management to make the syntax

look like Java...

[But] if I put classes in, I'd be in big trouble.

Page 16: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript vs. JScript vs. ECMAScript

Page 17: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Dec 1995

JavaScript released(with Netscape Navigator 2.0)

Aug 1996

JScript released(with Internet Explorer 3.0)

Nov 1996

Netscape hands JavaScript to ECMA for standardization

Page 18: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 19: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 20: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

June 1997

ECMAScript(ECMA-262)1st edition released

Nov 1996

Netscape hands JavaScript to ECMA for standardization

Dec 1999

ECMAScript(ECMA-262)3rd edition

released

Page 21: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 22: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Test for ES 5 browser support using Has.js:

Page 23: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 24: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 25: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Desktop Browsers

Smartphones, Tablets

Flash, PDFs,desktop widgets

Internet-enabled TVs, Blu-ray players

Page 26: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Coming soon to a server near you:

Page 27: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 28: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak TypingBlock vs. Function scope

Compiling vs. Minifying

Page 29: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

"Coffee should be black as hell,

strong as death, and sweet as love."

- Turkish proverb

Page 30: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Strongly-typed (Java):

Page 31: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Strongly-typed (Java):String name = “Scott”;

Date now = new Date();

Person p = new Person(name, now);

Person p = “Scott”;// throws ClassCastException

Page 32: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 33: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Weakly-typed(JavaScript):

var name = “Scott”;var now = new Date();var p = new Person(name, now);

Page 34: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Notice I didn’t say that JavaScript was “typeless”...

Page 35: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

You ar

e bett

er of

f ignor

ing ty

pes i

n Java

Scrip

t...

You are better off ignoring types in JavaScript...

Page 36: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

== vs. ===

(aka JavaScript “Truthiness”)

Page 37: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In Java:For primitives, use == for value equalityFor classes, use == for instance equality

Page 38: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Autoboxing:

Eliminates the difference between

primitives andobjects, eh?

Page 39: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In JavaScript:== tests for ”truthy” equalityIn other words, == does type coercion

Page 40: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In JavaScript:== tests for ”truthy” equalityIn other words, == does type coercion

Page 41: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In JavaScript:== tests for ”truthy” equalityIn other words, == does type coercion

Page 42: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

(Now do you believe me?)

You are better off ignoring types in JavaScript...

Page 43: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In JavaScript:=== tests for ”strict” equalityIn other words, NO type coercion

Page 44: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 45: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak Typing

Block vs. Function scope

Compiling vs. Minifying

Page 46: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Block Scope (Java):

Page 47: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

$ javac JavaScope.javaJavaScope.java:10: cannot find symbolsymbol : variable ilocation: class JavaScope System.out.println(i); ^JavaScope.java:11: cannot find symbolsymbol : variable messagelocation: class JavaScope System.out.println(message); ^2 errors

Page 48: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Is there Global scope in Java?

-- No

Page 49: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Class Scope (Java):

$ java JavaScope2 Hello Scott Hello Venkat

shadowedinstancevariable

Page 50: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Can you shadow local variable in Java?

Page 51: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

$ javac JavaScope.javaJavaScope.java:6: name is already defined in main(java.lang.String[]) String name = "Venkat"; ^1 error

Page 52: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In Java:- block scope- default is private

In JavaScript:???

Page 53: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

<script> var name = “Scott” city = “Broomfield”

var checkCity = function(c){ if(c == “Broomfield”){ state = “CO” } }</script>

Pathological Globalness (JavaScript)Q: Which variables are global?

A: All except c(Anything declared outside of a function is global)

(Anything declared without var is global)

Page 54: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

var names = ["Scott", "Venkat"]

var maxLength = function(n){ var max = 0 for(i=0; i<n.length; i++){ if(n[i].length > max){ max = n[i].length } } return max}

Function Scope (JavaScript)Q: Which variables are global?

A: All except n and max(Only declared with var + inside of a function is private)

Page 55: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

(function(){ var name = “Scott” var hello = function(){ ... }})(this);

Function Scope (cont.)

Solution: IIFE (Immediately-Invoked Function Expression)

http://benalman.com/news/2010/11/immediately-invoked-function-expression/

Page 56: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

var name = "Scott"

var hello = function(){ console.log("Hi " + name); var name = "Venkat" console.log("Hi " + name);}

hello()

Variable Hoisting (JavaScript)

A: $ node hello.js Hi undefined Hi Venkat

Q: What does hello() print?

Page 57: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

var name = "Scott"

var hello = function(){ console.log("Hi " + name); var name = "Venkat"}

Variable Hoisting (cont.)

var name = "Scott"

var hello = function(){ var name // all vars are “hoisted” // to the top of the f() console.log("Hi " + name); name = "Venkat"}

Page 58: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

In Java:- block scope- default is private

In JavaScript:- function scope- default is global

Page 59: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 60: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak Typing

Block vs. Function scope

Compiling vs. Minifying

Page 61: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Java is Object-Oriented

Page 62: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Java is Object-Oriented (cont.)

Page 63: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript had to “look like Java” only less so, be Java’s dumb kid brother or

boy-hostage sidekick.

There was some pressure from management to make the syntax

look like Java...

[But] if I put classes in, I'd be in big trouble.

Page 64: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

I joined Netscape on 4 April 1995, with the goal of

embedding the Scheme programming language,

or something like it, into Netscape's browser.

Page 65: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Java was in some ways a negative influence.

I didn't want to have anything “classy.”

So I swerved from that and it caused me to look at Self and do prototypes.

Page 66: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 67: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

var person = { name: "Scott Davis", city: "Broomfield"}

var person2 = { name: "Venkat Subramaniam", state: "CO" }

console.log(person.name);

JavaScript has Object Literals

JSON == “JavaScript Object Notation”

Page 68: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

// DANGER!!! DON’T DO THIS!// toString() is needlessly duplicated for each instance

var person = { name: "Scott Davis", city: "Broomfield", toString: function(){ return this.name + " lives in " + this.city }}

var person2 = { name: "Venkat Subramaniam", city: "Broomfield", toString: function(){ return this.name + " lives in " + this.city }}

console.log(person.toString());

JavaScript has Object Literals (cont.)

Page 69: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

// NOTE: Person isn’t an object literal// Person is a function // (using prototype to share a function instance)

var Person = function(){ this.name this.city }

Person.prototype.toString = function(){ return this.name + " lives in " + this.city}

var person = new Person()person.name = "Scott Davis"person.city = "Broomfield"

console.log(person.toString());

Page 70: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

var person = new Person()person.name = "Scott Davis"person.city = "Broomfield"console.log(person.toString());

var person2 = new Person()person2.name = "Venkat Subramaniam"person2.city = "Broomfield"person2.state = "CO"person2.toString = function(){ return this.name + " won’t tell you where he lives"}console.log(person2.toString());

Objects in JavaScript are Dynamic (i.e. They are mutable at runtime...)

Page 71: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 72: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak Typing

Block vs. Function scope

Compiling vs. Minifying

Page 73: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Development Deployment

Java (Compiled)

UnitTest

Person.java

Person.class

App.jar

App.war

App.ear

Source Compiled

Page 74: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Development Deployment

JavaScript (Interpreted)

Person.js

You ar

e bett

er of

f ignor

ing t

Not Quite...

Page 75: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Java compiler strips out:

whitespace

comments

unused imports

unreachable code branches

carriage returns / line-feeds

Page 76: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript minifier strips out:

whitespace

comments

unused imports

unreachable code branches

carriage returns / line-feeds

Page 77: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Before:(253 kb)

After: (95 kb)

Page 78: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 79: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Java compiler:Verifies syntactic correctness

JavaScript lint:Verifies syntactic correctness

Page 80: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 81: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 82: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

build script

Page 83: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 84: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Unit Test

Page 85: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 86: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 87: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Development Deployment

JavaScript (Interpreted)

UnitTest

Person.js

Lint / Minify

Concat-enated

Gzip

FarFutureExpiresHeader

Source Deployed

Concat-enated

Concat-enated

Page 88: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 89: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript
Page 90: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

History

Object-oriented vs. Functional

Strong vs. Weak Typing

Block vs. Function scope

Compiling vs. Minifying

Page 91: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

JavaScript forJava DevelopersScott Davis, ThirstyHead.com

Page 92: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Questions?Thanks for your time.

[email protected]

@scottdavis99Scott Davis

Page 93: JavaScript for Java Developers - GitHub Pagesscottdavis99.github.io/javaScriptForJavaDevelopers/... · ECMAScript (ECMA-262) 1st edition released Nov 1996 Netscape hands JavaScript

Image CreditsAll images courtesy of http://morgueFile.com

except:http://upload.wikimedia.org/wikinews/en/c/c2/Robert_Cailliau_OnDesk2.jpghttp://www.flickr.com/photos/gen/4774151517/http://www.flickr.com/photos/strandell/4693852906/http://www.flickr.com/photos/dburka/2836211647/http://www.flickr.com/photos/stephaniehobson/4692992276/http://commons.wikimedia.org/wiki/File:A_metal_bucket.jpghttp://commons.wikimedia.org/wiki/File:Coffee_pot_3.jpg