advanced javascript techniques

80
Advanced J avaS cript T echniques

Upload: dmitry-baranovskiy

Post on 15-May-2015

9.955 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Advanced JavaScript Techniques

AdvancedJavaScriptTechniques

Page 2: Advanced JavaScript Techniques

Ajax

Page 3: Advanced JavaScript Techniques

Ajax

Page 4: Advanced JavaScript Techniques

Loose Typing

Page 5: Advanced JavaScript Techniques

Loose Typing

var a = 5 + 4 + "px";var b = "$" + 5 + 4;var c = [1, 2, 3] + " and counting...";

Page 6: Advanced JavaScript Techniques

Loose Typing

var a = 5 + 4 + "px";var b = "$" + 5 + 4;var c = [1, 2, 3] + " and counting...";

alert(a);alert(b);alert(c);

Page 7: Advanced JavaScript Techniques

Loose Typing

var a = 5 + 4 + "px";var b = "$" + 5 + 4;var c = [1, 2, 3] + " and counting...";

alert(a);alert(b);alert(c);

9px

Page 8: Advanced JavaScript Techniques

Loose Typing

var a = 5 + 4 + "px";var b = "$" + 5 + 4;var c = [1, 2, 3] + " and counting...";

alert(a);alert(b);alert(c);

9px$54

Page 9: Advanced JavaScript Techniques

Loose Typing

var a = 5 + 4 + "px";var b = "$" + 5 + 4;var c = [1, 2, 3] + " and counting...";

alert(a);alert(b);alert(c);

9px$541,2,3 and counting...

Page 10: Advanced JavaScript Techniques

Loose Typing

var a = 5 + 4 + "px";var b = "$" + 5 + 4;var c = [1, 2, 3] + " and counting...";

alert(a);alert(b);alert(c);

9px$541,2,3 and counting...

if (5) {...}

Page 11: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px"

Page 12: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px"

// true

Page 13: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px"

// 3// true

Page 14: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px"

// 3// true

// 2

Page 15: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px"

// 3// true

// Infinity// 2

Page 16: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px"

// 3// true

// "12px"// Infinity// 2

Page 17: Advanced JavaScript Techniques

Loose Typing

"5" == 5 6 / "2" "4" - "2" 12 / 0 12 + "px" 12 - "px" // NaN

// 3// true

// "12px"// Infinity// 2

Page 18: Advanced JavaScript Techniques

Good, Bad & Ugly

Page 19: Advanced JavaScript Techniques

null, NaN & undefined

Page 20: Advanced JavaScript Techniques

null, NaN & undefined

var a = null;var b = 5 - "$";

Page 21: Advanced JavaScript Techniques

null, NaN & undefined

var a = null;var b = 5 - "$";

alert(a); // nullalert(b); // NaNalert(c); // undefined

Page 22: Advanced JavaScript Techniques

null, NaN & undefined

var a = null;var b = 5 - "$";

alert(a); // nullalert(b); // NaNalert(c); // undefined

null == undefined // truenull === undefined // false

Page 23: Advanced JavaScript Techniques

“Falsish” values:• zero (0)• empty string (“”)• null• NaN• undefined

null, NaN & undefined

Page 24: Advanced JavaScript Techniques

&& and ||

Page 25: Advanced JavaScript Techniques

&& and ||

var a;if (b) { a = b;} else { a = 0; // default}

Page 26: Advanced JavaScript Techniques

&& and ||

var a;if (b) { a = b;} else { a = 0; // default}

var a = b || 0;

Page 27: Advanced JavaScript Techniques

&& and ||

var a;if (b) { a = c;} else { a = b;}

Page 28: Advanced JavaScript Techniques

&& and ||

var a;if (b) { a = c;} else { a = b;}

var a = b && c;

Page 29: Advanced JavaScript Techniques

Anonymous Functions

Page 30: Advanced JavaScript Techniques

Anonymous Functions

function plus(a, b) { return a + b;}var minus = function (a, b) { return a - b;}function operation(a, b, sign) { return sign(a, b);}var i = operation(3, 4, plus);var j = operation(12, 4.5, function (a, b) { return a * b;});

Page 31: Advanced JavaScript Techniques

Anonymous Functions

function plus(a, b) { return a + b;}var minus = function (a, b) { return a - b;}function operation(a, b, sign) { return sign(a, b);}var i = operation(3, 4, plus);var j = operation(12, 4.5, function (a, b) { return a * b;});

Page 32: Advanced JavaScript Techniques

Object

Page 33: Advanced JavaScript Techniques

Object

var Orc = { name: "Zurk", level: 80, damage: 300, "go-to": function () {…}, die: function () {…}}Orc.level++;Orc.damage += 3;Orc["go-to"](x, y);Orc.die();Orc.avatar = "http://orcs.org/zurk/pic.jpg";

Page 34: Advanced JavaScript Techniques

Object

alert("Object"); alert.level = 5; alert.level += 3; alert(alert.level); // 8

Page 35: Advanced JavaScript Techniques

Object

function Human(name) { this.name = name; this.getName = function () {return this.name;

}; } function Orc(name) { this.name = name; } Orc.prototype.getName = function () { return this.name;

}; john = new Human("John"); zorg = new Orc("Zorg");

Page 36: Advanced JavaScript Techniques

Prototype

Page 37: Advanced JavaScript Techniques

Prototype

var Elf = function () {}; Elf.prototype = { weapon: "bow", attack: function () {...}, damage: 21

}; var Troll = function () {}; Troll.prototype = Elf.prototype; Troll.prototype.weapon = "axe"; var Zahar = new Troll(), Zhabah = new Troll(), Feanor = new Elf();

Page 38: Advanced JavaScript Techniques

Type of…

Page 39: Advanced JavaScript Techniques

var int = 5, fl = 5.5, s = "C", o = {name: "Name"}, f = function (){}, a = [1, 2, 3];

typeof int; // "number"typeof fl; // "number"typeof s; // "string"typeof o; // "object"typeof f; // "function"

Type of…

Page 40: Advanced JavaScript Techniques

var int = 5, fl = 5.5, s = "C", o = {name: "Name"}, f = function (){}, a = [1, 2, 3];

typeof int; // "number"typeof fl; // "number"typeof s; // "string"typeof o; // "object"typeof f; // "function"

typeof a; // "object"

Type of…

Page 41: Advanced JavaScript Techniques

var int = 5, fl = 5.5, s = "C", o = {name: "Name"}, f = function (){}, a = [1, 2, 3];

typeof int; // "number"typeof fl; // "number"typeof s; // "string"typeof o; // "object"typeof f; // "function"

What the?…typeof a; // "object"

Type of…

Page 42: Advanced JavaScript Techniques

var int = 5, fl = 5.5, s = "C", o = {name: "Name"}, f = function (){}, a = [1, 2, 3];

typeof int; // "number"typeof fl; // "number"typeof s; // "string"typeof o; // "object"typeof f; // "function"

What the?…typeof a; // "object"

Type of…

typeof z; // "undefined"typeof null; // "object"typeof NaN; // "number"

Page 43: Advanced JavaScript Techniques

Who is There?

Page 44: Advanced JavaScript Techniques

Who is There?

for (var i in zorg) { alert("zorg." + i + " = " + zorg[i];

} if ("wings" in unit) {alert("the unit can fly!");

}

Page 45: Advanced JavaScript Techniques

Delete

Page 46: Advanced JavaScript Techniques

Delete

var obj = {a: 1, b: 2, c: 3};

obj.b = undefined;alert(obj.b); // undefinedalert("b" in obj); // true

delete obj.b;alert(obj.b); // undefinedalert("b" in obj); // false

Page 47: Advanced JavaScript Techniques

‘this’ is Fun

Page 48: Advanced JavaScript Techniques

‘this’ is Fun

var Elf = function () {}; Elf.prototype = { weapon: "bow", attacks: function (target) { target.health -= this.damage;

}, damage: 21

}; var Troll = {}; Troll.weapon = "axe"; Troll.damage = 20; Troll.attacks = Elf.prototype.attacks;

Page 49: Advanced JavaScript Techniques

‘this’ is Fun

var Elf = function () {}; Elf.prototype = { weapon: "bow", attacks: function (target) { target.health -= this.damage;

}, damage: 21

}; var Troll = {}; Troll.weapon = "axe"; Troll.damage = 20; Troll.attacks = Elf.prototype.attacks;

Page 50: Advanced JavaScript Techniques

Scope & Context

Page 51: Advanced JavaScript Techniques

Scope & Context

function die(cry, volume) { this.hitpoints = 0; this.damage = 0; this.style = "dead-body";this.play(cry, volume);

} var Zhuk = new Orc();Zhuk.die = die;Zhuk.die();

die.call(Zhuk, cry, volume); die.apply(Zhuk, [cry, volume]);

Page 52: Advanced JavaScript Techniques

Constructor

Page 53: Advanced JavaScript Techniques

Constructor

var zorg = new Orc("Zorg"); if (zorg.constructor == Orc) { alert("Run! Orcs in town!");

}

var borg = new function("Börg") {...};var zima = new borg.constructor("Zima");

typeof ([1, 2, 3]) == "object"; ([1, 2, 3]).constructor == Array;

Page 54: Advanced JavaScript Techniques

Instance of…

Page 55: Advanced JavaScript Techniques

Instance of...

([1, 2, 3]).constructor == Array; // true([1, 2, 3]).constructor == Object; // false

([1, 2, 3]) instanceof Array; // true([1, 2, 3]) instanceof Object; // true

Page 56: Advanced JavaScript Techniques

Closures

Page 57: Advanced JavaScript Techniques

Closures

var x = add(4)(5);

Page 58: Advanced JavaScript Techniques

Closures

var x = add(4)(5);

var x = (add(4))(5);var z = add(4);var x = z(5); // 9

Page 59: Advanced JavaScript Techniques

Closures

var x = add(4)(5);

function add(a) { return function(b) { return a + b; }}

var x = (add(4))(5);var z = add(4);var x = z(5); // 9

Page 60: Advanced JavaScript Techniques

Closures

var x = add(4)(5);

function add(a) { return function(b) { return a + b; }}

var x = (add(4))(5);var z = add(4);var x = z(5); // 9

Page 61: Advanced JavaScript Techniques

Arguments

Page 62: Advanced JavaScript Techniques

Arguments

function add(a, b) { return a + b; }

function add(a, b, c) { return a + b + c; }

function add() { var res = 0; for (var i = 0; i < arguments.length; i++) { res += arguments[i]; } return res; }

Page 63: Advanced JavaScript Techniques

Morphing Functions

Page 64: Advanced JavaScript Techniques

Morphing Functions

function getButtonImage() { var res = ""; if (browser.isIE) { res = "/i/button.gif"; } else { res = "/i/button.png"; } getButtonImage = function () { return res; } return res; }

Page 65: Advanced JavaScript Techniques

Callee

Page 66: Advanced JavaScript Techniques

Callee

setTimeout( function () { if (box.opacity < 100) { box.opacity++; setTimeout(/* this function */, 100); } }, 100);

Page 67: Advanced JavaScript Techniques

Callee

var f = function () { if (box.opacity < 100) { box.opacity++; setTimeout(f, 100); } };setTimeout(f, 100);

Page 68: Advanced JavaScript Techniques

Callee

setTimeout( function () { if (box.opacity < 100) { box.opacity++; setTimeout(/* this function */, 100); } }, 100);

Page 69: Advanced JavaScript Techniques

Callee

setTimeout( function () { if (box.opacity < 100) { box.opacity++; setTimeout(arguments.callee, 100); } }, 100);

Page 70: Advanced JavaScript Techniques

toString

Page 71: Advanced JavaScript Techniques

toString

var feanor = new Elf(); alert(feanor); // [object] feanor.toString = function () { return ":)"; } alert(feanor); // :)

Page 72: Advanced JavaScript Techniques

Aliasing

Page 73: Advanced JavaScript Techniques

Aliasing

var a = GLOBAL.long.path_to[your](object);

a.name = "new name"; a(something.else); a.size = (a.w + a.x) * (a.h + a.y);

Page 74: Advanced JavaScript Techniques

Aliasing

var a = GLOBAL.long.path_to[your](object);

a.name = "new name"; a(something.else); a.size = (a.w + a.x) * (a.h + a.y);

var b = function (a) {

}b(GLOBAL.long.path_to[your](object));

Page 75: Advanced JavaScript Techniques

Aliasing

var a = [4, 2, 6, 1, 8, 0];

for (var i = 0, ii = a.length; i < ii; i++) { a[i] = function () { return i; };}alert(a[0]());alert(a[3]());

Page 76: Advanced JavaScript Techniques

Aliasing

var a = [4, 2, 6, 1, 8, 0];

for (var i = 0, ii = a.length; i < ii; i++) { a[i] = function () { return i; };}alert(a[0]());alert(a[3]());

for (var i = 0, ii = a.length; i < ii; i++) { a[i] = (function (num) { return function() { return num; }; })(i);}

Page 77: Advanced JavaScript Techniques

Try to Catch

Page 78: Advanced JavaScript Techniques

Try to Catch

function log(message) { try { console.log(message); } catch(e) { if (!log.messages) { log.messages = [message]; } else { log.messages.push(message); } }}

Page 79: Advanced JavaScript Techniques

Thank You