+ All Categories
Home > Technology > So You Think You Know JavaScript

So You Think You Know JavaScript

Date post: 30-Nov-2014
Category:
Upload: guy-royse
View: 303 times
Download: 2 times
Share this document with a friend
Description:
Many folks think they know JavaScript. They know the syntax and can manipulate the DOM. Maybe they have even used jQuery. But do they really know it? I thought I did until I started digging and discovered that JavaScript is more than just a toy language for web pages. It's a full-fledged functional programming language chock full of richness. In this session, targeted at beginners, you will be introduced to some of this richness in an exciting game show format -- complete with prizes. You will learn about functions, objects, closures, and revealing modules. And you'll leave a more informed JavaScript programmer (unless, of course, you already knew JavaScript in which case you'll just leave with a prize).
47
So You Think You Know JavaScript
Transcript
Page 1: So You Think You Know JavaScript

So You Think You Know

JavaScript?

Page 2: So You Think You Know JavaScript

Guy Royse, ConsultantPillar [email protected]@guyroyse

Clean CodeTDD

JavaScriptPeople

Crufty CodeWorking Alone

COBOLMean People

DislikesLikes

Who is This Guy?

Page 3: So You Think You Know JavaScript

I ThoughtThat

I KnewJavaScript

Page 4: So You Think You Know JavaScript

A Word About Scope

Source: http://xkcd.com/101/

Page 5: So You Think You Know JavaScript

So You Think YouKnow JavaScript?

Page 6: So You Think You Know JavaScript

Show JavaScript Problem

Someone Tries toSolve It

Are TheyCorrect?

Dispense Candy

YESAnymore

Problems?

YES

Game Over

NO

Try Again

NO

Page 7: So You Think You Know JavaScript

Rule #1

The first personto answer correctly

winsa candy bar.

Page 8: So You Think You Know JavaScript

You may not win more than one candy bar.

So let others play the game too.

Rule #2

Page 9: So You Think You Know JavaScript

If you break Rule #2,I will give the candy bar to the skinniest person

in the room.

Rule #3

Page 10: So You Think You Know JavaScript

If you break Rule #2and are the skinniest person in the room, I will eat the candy bar.

Rule #4

Page 11: So You Think You Know JavaScript

In the event of any rules dispute it is important

to remember,I am always right.

Rule #5

Page 12: So You Think You Know JavaScript

Let’sGet

Started!

Page 13: So You Think You Know JavaScript

a) undefined -- the code will throw an exceptionb) [undefined, 'foo', 'bar']c) ['foo', 'bar', 'baz']d) [null, 'foo', 'bar‘]

a) undefined -- the code will throw an exceptionb) [undefined, 'foo', 'bar']c) ['foo', 'bar', 'baz']d) [null, 'foo', 'bar‘]

var echoEchoEcho = function(value) { var returnValue = echoEchoEcho.lastValue; echoEchoEcho.lastValue = value; return returnValue; }

var results = []; results.push(echoEchoEcho('foo')); results.push(echoEchoEcho('bar')); results.push(echoEchoEcho('baz'));

Problem #1

Page 14: So You Think You Know JavaScript

{}Many UnexpectedThings are Objects

new String('foo')new Number(42)new Boolean(true)function()

Objects or Not?'foo'

42true and false

['foo', 42, false]

Page 15: So You Think You Know JavaScript

var foo = new Object();

{}DefiningObjects

Page 16: So You Think You Know JavaScript

{}DefiningObjects

var foo = {};

Page 17: So You Think You Know JavaScript

{}DefiningObjects

var foo = { bool : true, num : 42, text : 'some text', func : function() { return 2 + 2 }, obj : { foo : 1, bar : 2 }};

Page 18: So You Think You Know JavaScript

{}ModifyingObjects

var foo = { value : 42 };

foo.value = 23; // updatefoo.otherValue = true; // createdelete foo.value; // delete

Page 19: So You Think You Know JavaScript

{}AccessingObjects

var foo = { value : 42 };

var x = foo.value;var y = foo['value'];

var val = 'value';var z = foo[val];

Page 20: So You Think You Know JavaScript

{}

[]

Page 21: So You Think You Know JavaScript

Where are the classes?

Page 22: So You Think You Know JavaScript

a) undefined -- the code will throw an exceptionb) nullc) 100d) 600

a) undefined -- the code will throw an exceptionb) nullc) 100d) 600

var Policy = function() { this.premium = 600; this.term = 6; this.calculateMonthlyAmount = function() { return this.premium / this.term; }; };

var myPolicy = Policy(); var myMonthlyAmount = myPolicy.calculateMonthlyAmount();

Problem #2

Page 23: So You Think You Know JavaScript

By defaultthis points to the global namespace

Page 24: So You Think You Know JavaScript

var balance = 200.00;

var Account = function(acctBalance) { this.balance = acctBalance; this.deposit = function(amount) { this.balance += amount; }};

var myAcct = Account(500.00);var myAcct = Account(0.0);

Page 25: So You Think You Know JavaScript

Classes in JavaScript are

a fiction

Page 26: So You Think You Know JavaScript

var Policy = function(policyNumber) { this.policyNumber = policyNumber; this.compressPolicyNumber = function() { return this.policyNumber.replace(' ', ''); };};

var policy = new Policy();

{}DefiningClasses

Page 27: So You Think You Know JavaScript

var createPolicy = function(policyNumber) { this = {}; this.policyNumber = policyNumber; this.compressPolicyNumber = function() { return this.policyNumber.replace(' ', ''); }; return this;};

{}DefiningClasses

Page 28: So You Think You Know JavaScript

{}Safer ConstructorFunction

var Foo = function() { if (!this instanceof Foo) { return new Foo(); }

this.bar = 42; this.baz = 'Hello, World!'};

Page 29: So You Think You Know JavaScript

a) undefined -- the code will throw an exceptionb) 100c) 500d) 300

a) undefined -- the code will throw an exceptionb) 100c) 500d) 300

var principal = 5000;

var calculate = function() { return this.principal * 0.10; };

var account = { principal : 1000, interest : calculate }; var loan = { principal : 2000, charge : calculate };

var amount = account.interest() + loan.charge();

Problem #3

Page 30: So You Think You Know JavaScript

function echo(value) { return value;}

{}DefiningFunctions

Page 31: So You Think You Know JavaScript

var echo = function(value) { return value;};

{}DefiningFunctions

Page 32: So You Think You Know JavaScript

var echo = function(value) { return value;};

var repeat = echo;

{}DefiningFunctions

Page 33: So You Think You Know JavaScript

()

Page 34: So You Think You Know JavaScript

{}InvokingFunctions

var echo = function(value) { return value;};

echo('Hola, mundo!');

Page 35: So You Think You Know JavaScript

{}InvokingFunctions

var object = { echo: function(value) { return value; }};object['echo']('Hola, mundo!');

var array = [object.echo];array[0]('Hola, mundo!');

Page 36: So You Think You Know JavaScript

{}ImmediateFunctions

var value = (function(value) { return value;})('Hello, World!');

Page 37: So You Think You Know JavaScript

a) undefined -- the code will throw an exceptionb) ['Marco!', 'Polo!', 'Polo!']c) ['Marco!', 'Polo!', 'Marco!]d) ['Polo!', 'Marco!', 'Polo!]

a) undefined -- the code will throw an exceptionb) ['Marco!', 'Polo!', 'Polo!']c) ['Marco!', 'Polo!', 'Marco!]d) ['Polo!', 'Marco!', 'Polo!]

var foo = function() { foo = function() { return 'Polo!'; }; return 'Marco!'; };

var results = []; results.push(foo()); results.push(foo()); results.push(foo());

Problem #4

Page 38: So You Think You Know JavaScript

This is aself-defining

function

Page 39: So You Think You Know JavaScript

{}Self-DefiningFunctions

var foo = function() { foo = function() { return 'Polo!'; }; return 'Marco!';};

var bar = foo;bar();

Page 40: So You Think You Know JavaScript

{}Functions asArguments

var foo = [1,2,3];var bar = [];

foo.forEach(function(item) { bar.push(item * 10);});

// bar == [10, 20, 30]

Page 41: So You Think You Know JavaScript

{}ArrayFunctions

[].forEach(fn)[].filter(fn)

[].every(fn)

[].some(fn)

[].sort(fn)

iterates every itemcreates new array of items

where true is returnediterates items

until false is returnediterates items

until true is returnedcomparator function

Page 42: So You Think You Know JavaScript

a) undefined -- the code will throw an exceptionb) ['foo','bar','baz']c) ['bar','baz','qux']d) ['qux','baz','bar']

a) undefined -- the code will throw an exceptionb) ['foo','bar','baz']c) ['bar','baz','qux']d) ['qux','baz','bar']

var foo = (function() { var count = 0; var values = ['foo', 'bar', 'baz', 'qux']; return function() { count++; return values[count]; }; })();

var results = [foo(), foo(), foo()];

Problem #5

Page 43: So You Think You Know JavaScript

This isa closure

Page 44: So You Think You Know JavaScript

{}PrivateVariables

var createPolicy = function(number) { var policyNumber = number; return { getPolicyNumber: function() { return policyNumber; } };};

Page 45: So You Think You Know JavaScript

{}RevealingModule

var policy = (function() { var policyNumber = '1234567890'; return { getPolicyNumber: function() { return policyNumber; } };})();

Page 46: So You Think You Know JavaScript

ThanksFor

Playing!

Page 47: So You Think You Know JavaScript

{}FurtherReading

JavaScript: The Good PartsDouglas Crockford

JavaScript PatternsStoyan Stefanov


Recommended