javascript the language of the web

85
Javascript the Programming Language of the Web http://anders.janmyr.com [email protected] Anders Janmyr Tuesday, November 9, 2010

Upload: andersjanmyr

Post on 13-May-2015

1.390 views

Category:

Technology


1 download

DESCRIPTION

Crash introduction to Javascript

TRANSCRIPT

Page 1: Javascript the Language of the Web

Javascriptthe Programming Language of the Web

http://[email protected]

Anders Janmyr

Tuesday, November 9, 2010

Page 2: Javascript the Language of the Web

Ugly Javascript

Tuesday, November 9, 2010

Page 3: Javascript the Language of the Web

Beautiful Javascript

Tuesday, November 9, 2010

Page 4: Javascript the Language of the Web

Y-CombinatorScheme (Lisp)

(define Y (lambda (X) ((lambda (procedure) (X (lambda (arg)

((procedure procedure) arg))))

(lambda (procedure) (X (lambda (arg)

((procedure procedure) arg)))))))

Tuesday, November 9, 2010

Page 5: Javascript the Language of the Web

Y-CombinatorJavascript

function Y (X) { return (function(procedure) { return X(function(arg) { return procedure(procedure)(arg); }); })(function(procedure) { return X(function(arg) { return procedure(procedure)(arg); }); });}

Tuesday, November 9, 2010

Page 6: Javascript the Language of the Web

Syntax

Tuesday, November 9, 2010

Page 7: Javascript the Language of the Web

Values

Tuesday, November 9, 2010

Page 8: Javascript the Language of the Web

Number

• 64-bit floating point Double

• 0.1 + 0.2 = 0.30000000000000004

• NaN

Tuesday, November 9, 2010

Page 9: Javascript the Language of the Web

Strings

• Immutable

• ‘a string’ == “a string”

Tuesday, November 9, 2010

Page 10: Javascript the Language of the Web

Booleans

• true

• false

• Boolean()

• returns false for falsy values

• false, null, undefined, "", 0, NaN

Tuesday, November 9, 2010

Page 11: Javascript the Language of the Web

null

Tuesday, November 9, 2010

Page 12: Javascript the Language of the Web

Undefined

• Not even null

• Default value

• Parameters

• Arguments

• Non-existent members

Tuesday, November 9, 2010

Page 13: Javascript the Language of the Web

Object

• Everything else

• Including functions

Tuesday, November 9, 2010

Page 14: Javascript the Language of the Web

Statements

Tuesday, November 9, 2010

Page 15: Javascript the Language of the Web

var

• Declares a variable

• If you forget, it will be defined globally!

• Scope of variable is the function

Tuesday, November 9, 2010

Page 16: Javascript the Language of the Web

Conditionals

• If

• Switch - Case

if (unit == 'Litre') return value;else return this.withTwoDecimals(value / 3.7854);

Tuesday, November 9, 2010

Page 17: Javascript the Language of the Web

Loops• while

• do - while

• for(var i; i<42; i++)

• for (key in object)

for (var key in market) { current.market[key] = gui.convert(market[key]);}

Tuesday, November 9, 2010

Page 18: Javascript the Language of the Web

Exceptionstry { setSelected(target); f();} catch (err) { console.log(err);}

throw(anyObject)

Tuesday, November 9, 2010

Page 19: Javascript the Language of the Web

Disruptive

• return [value]

• break [label]

• continue [label]

• throw object

Tuesday, November 9, 2010

Page 20: Javascript the Language of the Web

Literals

number 1.234

string ‘anders’, “janmyr”

object { }

array [ ]

function function() {}

regexp /^anders$/

Tuesday, November 9, 2010

Page 21: Javascript the Language of the Web

typeoftype typeof

object 'object'

function 'function'

array 'object'

number 'number'

string 'string'

boolean 'boolean'

null 'object'

undefined 'undefined'

Tuesday, November 9, 2010

Page 22: Javascript the Language of the Web

Equality

• 5 == “5” // true

• 5 === “5” // false

Tuesday, November 9, 2010

Page 23: Javascript the Language of the Web

Object

Tuesday, November 9, 2010

Page 24: Javascript the Language of the Web

Object

Hashtable

Tuesday, November 9, 2010

Page 25: Javascript the Language of the Web

Object

Dynamic

Tuesday, November 9, 2010

Page 26: Javascript the Language of the Web

Object Literal

var empty_object = {};

Tuesday, November 9, 2010

Page 27: Javascript the Language of the Web

var kjell = { name: "Kjell", "kind": "Malayan"};

Tuesday, November 9, 2010

Page 28: Javascript the Language of the Web

var kjell = { name: "Kjell", "kind": "Malayan" address: { country: "Denmark" }};

Tuesday, November 9, 2010

Page 29: Javascript the Language of the Web

Retrievalkjell.name // “Kjell”kjell["name"] // “Kjell”

// Denmarkkjell.address.country kjell['address']["country"]

Tuesday, November 9, 2010

Page 30: Javascript the Language of the Web

Retrieving non-existent properties

kjell.firstname // undefinedkjell["NAME"] // undefinedkjell.home.country // Error

Tuesday, November 9, 2010

Page 31: Javascript the Language of the Web

Setting non-existent properties

kjell.firstname = 'Sven';kjell["NAME"] = 'SVEN';

kjell.firstname // 'Sven'

Tuesday, November 9, 2010

Page 32: Javascript the Language of the Web

delete kjell.firstname

kjell.firstname // undefined

Tuesday, November 9, 2010

Page 33: Javascript the Language of the Web

Prototypical

Tuesday, November 9, 2010

Page 34: Javascript the Language of the Web

Prototypical Inheritance using Object.create

var rudolph = Object.create(kjell);

rudolph.name // “Kjell”

Tuesday, November 9, 2010

Page 35: Javascript the Language of the Web

Prototypical Inheritance

name Kjell

kind Malayan

id a4r54ed

prototype

Tuesday, November 9, 2010

Page 36: Javascript the Language of the Web

rudolph.name = 'Rudolph';

rudolph.name // “Rudolph”kjell.name // “Kjell”

rudolph.kind // ‘Malayan’

Tuesday, November 9, 2010

Page 37: Javascript the Language of the Web

kjell.kind = 'Baird';

rudolph.kind // ‘Baird’

rudolph.kind // ‘Malayan’

Tuesday, November 9, 2010

Page 38: Javascript the Language of the Web

delete rudolph.name

rudolph.name // ‘Kjell’

Tuesday, November 9, 2010

Page 39: Javascript the Language of the Web

Prototypical Inheritance

new Constructor();

Returns a new object with a link toConstructor.prototype

Tuesday, November 9, 2010

Page 40: Javascript the Language of the Web

Prototypical Inheritance

Object.create = function(o) { function F() {} F.prototype = o; return new F();}

Tuesday, November 9, 2010

Page 41: Javascript the Language of the Web

Prototypical Inheritance

name kjell

kind Malayan...

id a4r54edname rudolph

prototype

Tuesday, November 9, 2010

Page 42: Javascript the Language of the Web

Array

Tuesday, November 9, 2010

Page 43: Javascript the Language of the Web

Arrays

• Array inherits from object

• Indexes are converted to strings

• Magic length property

• Always one larger than the highest int property

Tuesday, November 9, 2010

Page 44: Javascript the Language of the Web

Array Literals

• [ ]

• names = [ ‘Rudolph’, ‘Kjell’, ‘Torsten’]

• typeof value == ‘object’

• value.constructor === Array

Tuesday, November 9, 2010

Page 45: Javascript the Language of the Web

Array Methods

• concat

• join

• pop

• push

• slice

• sort

• splice

Tuesday, November 9, 2010

Page 46: Javascript the Language of the Web

JSON

Tuesday, November 9, 2010

Page 47: Javascript the Language of the Web

JSON{ "version": "1.0", "markets": [ { "name": "Europe", "currency": "EUR"}, { "name": "North America", "currency": "USD"}, { "name": "Other", "currency": "USD"} ], "serviceTypes": ["Maintenence", "WearingPart"], "valueTypes": ["Market value", "Trade in value"]}

Tuesday, November 9, 2010

Page 48: Javascript the Language of the Web

Functions

Tuesday, November 9, 2010

Page 49: Javascript the Language of the Web

Function

function() {};

lambda

Tuesday, November 9, 2010

Page 50: Javascript the Language of the Web

Function

First class object

Tuesday, November 9, 2010

Page 51: Javascript the Language of the Web

Function Statement

function foo() {}

expands to

var foo = function foo() {};

Tuesday, November 9, 2010

Page 52: Javascript the Language of the Web

Functions

Can be defined inside other functions!

Tuesday, November 9, 2010

Page 53: Javascript the Language of the Web

residualValues: function(cur) { var self = this; return function() { return [1,2,3,4,5].map(function(age) { return { years: age, value: self.tradePercent(cur, age) }; }); }}

Tuesday, November 9, 2010

Page 54: Javascript the Language of the Web

Methods

functions stored in objects

Tuesday, November 9, 2010

Page 55: Javascript the Language of the Web

Built-in Prototypes

• Object.prototype

• Array.prototype

• Function.prototype

• Number.prototype

• String.prototype

• Boolean.prototype

Tuesday, November 9, 2010

Page 56: Javascript the Language of the Web

Array.prototype.contains = function(element) { for (var i = 0; i < this.length; i++) { if (this[i] == element) return true; } return false;}

[1, 2, 3].contains(3); // true

Tuesday, November 9, 2010

Page 57: Javascript the Language of the Web

Function.prototype.method = function(name, func) {

this.prototype[name] = func;return this;

}

Tuesday, November 9, 2010

Page 58: Javascript the Language of the Web

String.method(‘trim’, function() { return this.replace(/^\s+|\s+$/g, ‘’);}

“ tapir “.trim(); // “tapir”

Tuesday, November 9, 2010

Page 59: Javascript the Language of the Web

Scope

Tuesday, November 9, 2010

Page 60: Javascript the Language of the Web

Scope

The function is the scope of the variables

Tuesday, November 9, 2010

Page 61: Javascript the Language of the Web

Invocation Forms

• Function form

• sleep(10)

• Method form• kjell.sleep(10)

• kjell[“sleep”](10)

• Constructor form• new sleep(10)

• Apply form• sleep.apply(rudolph, 10)

Tuesday, November 9, 2010

Page 62: Javascript the Language of the Web

thisInvocation

Formthis

functionthe global

object

method kjell

constructor a new object

apply rudolph

this is an extra parameter that depends on the

calling form

Tuesday, November 9, 2010

Page 63: Javascript the Language of the Web

arguments

• A special array like, DYNAMIC, parameter

• All the arguments of the invocation

Tuesday, November 9, 2010

Page 64: Javascript the Language of the Web

function sum() { var i, n = arguments.length, total = 0; for (i = 0; i < n; i += 1) { total += arguments[i]; } return total;}

sum(1, 2, 3, 4);

Tuesday, November 9, 2010

Page 65: Javascript the Language of the Web

Dynamic Compilation

• eval

• Evaluates a string and returns the result.

• new Function(parameterArray, codeString)

• Creates and returns a function.

• var add=new Function("a", "b", "return a+b;");

Tuesday, November 9, 2010

Page 66: Javascript the Language of the Web

Global Variables

Tuesday, November 9, 2010

Page 67: Javascript the Language of the Web

The global Object

• Container for all variables

• On browsers window == global

• Any var not declared is global

• Global variables are BAD

Tuesday, November 9, 2010

Page 68: Javascript the Language of the Web

Good Practices

Tuesday, November 9, 2010

Page 69: Javascript the Language of the Web

Modules

var MyNamespace = {};

var MyNS = MyNS || {};

Tuesday, November 9, 2010

Page 70: Javascript the Language of the Web

Cascade

setFirst: function(name) { this.first = name; return this;}

person.setFirst(“Anders”).setLast(“Janmyr”).setAge(40);

Tuesday, November 9, 2010

Page 71: Javascript the Language of the Web

Encapsulationvar Esperanto = Esperanto || {};

Esperanto.Lab = function() { var privVar = "example"; function privFunc() { return privVar; } return { example: function() { return privFunc(); } }}()

Tuesday, November 9, 2010

Page 72: Javascript the Language of the Web

Local FunctionscostData: function(current) { var data = {}; function addEntry(name, cost) { data[name + "PerHour"] = model.withTwoDec(cost/hours); data[name] = model.noDecimalsWithSeparator(cost); };

addEntry("interest", this.financialCost(current)), addEntry("depreciation", this.depreciationCost(current)), return data;},

Tuesday, November 9, 2010

Page 73: Javascript the Language of the Web

self = this

attachFormListener: function(form, object) { var self = this; function populator(event) { self.populateFromForm(form, object); object.notify(); }; form.getElements().each(function(child) { child.observe('change', populator); });},

Tuesday, November 9, 2010

Page 74: Javascript the Language of the Web

Mixins

Object.mixin = function(destination, source) { for (property in source) destination[property] = source[property]; return destination;}

Tuesday, November 9, 2010

Page 75: Javascript the Language of the Web

Enforcing New

function User(first, last) { if ( !(this instanceOf User)) return new User(first, last); this.name = first + ‘ ‘ + last;}

Tuesday, November 9, 2010

Page 76: Javascript the Language of the Web

Tools

Tuesday, November 9, 2010

Page 77: Javascript the Language of the Web

Debuggers

• Firebug

• Apple Dev Tools

• Chrome Dev Tools

• Internet Explorer Developer Tools

Tuesday, November 9, 2010

Page 78: Javascript the Language of the Web

CSS Tools

• http://codylindley.com/jqueryselectors/

• Selector Gadget

• Nokogiri• XML, HTML, SAX Parser

Tuesday, November 9, 2010

Page 80: Javascript the Language of the Web

Build Tools

• Rake

• SCons

• Ant

• Scripts

Tuesday, November 9, 2010

Page 81: Javascript the Language of the Web

File Watchers

• xrefresh for Firefox and IE• http://xrefresh.binaryage.com/

• LiveReload for Safari and Chrome• http://github.com/mockko/livereload

• Watchr• gem install watchr

Tuesday, November 9, 2010

Page 82: Javascript the Language of the Web

Localtunnel

• gem install localtunnel

• localtunnel -k my_public_ssh.key

• localtunnel 80• Port 80 is now publicly accessible from

http://8bv2.localtunnel.com ...

Tuesday, November 9, 2010

Page 83: Javascript the Language of the Web

Tuesday, November 9, 2010

Page 84: Javascript the Language of the Web

Lab

http://10.48.44.155/~andersjanmyr/

Tuesday, November 9, 2010

Page 85: Javascript the Language of the Web

Thank you!

http://[email protected]

Anders Janmyr

Tuesday, November 9, 2010