133
JavaScript for PHP Developers Ed Finkler @funkatron [email protected] November 1, 2010 #zendcon #js4php http://joind.in/2289

JavaScript for PHP Developers

Embed Size (px)

DESCRIPTION

Code is available here: http://github.com/funkatron/JSforPHPDevs

Citation preview

Page 1: JavaScript for PHP Developers

JavaScript for PHP DevelopersEd Finkler@[email protected]

November 1, 2010

#zendcon #js4phphttp://joind.in/2289

Page 2: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Goodsie.com

2

Invitation code: zendcon

Page 3: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

What is this?

3

Page 4: JavaScript for PHP Developers

Stop c+p'ing, start writing

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

A practical overview of JSfor the PHP developer

4

Page 5: JavaScript for PHP Developers

I'm too dumb for that

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

NOT CS-oriented

5

Page 6: JavaScript for PHP Developers

FWIW

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

My experiences and best practices

6

Page 7: JavaScript for PHP Developers

JS devs are kind of dickheads

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

JavaScript dev is opinionated

7

Page 8: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

History of JavaScript

8

Page 9: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Brendan Eich

9

Page 10: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

"Mocha"

10

Page 11: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

"LiveScript"

11

Page 12: JavaScript for PHP Developers

Seemed like a good idea at the time

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

"JavaScript"

12

http://www.infoworld.com/d/developer-world/javascript-creator-ponders-past-future-704

Page 13: JavaScript for PHP Developers

Yeesh

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

ECMAScript

13

Page 14: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Core JavaScript

14

Page 15: JavaScript for PHP Developers

aka ECMAScript 3, circa 1999

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Baseline is JS 1.5

15

Page 16: JavaScript for PHP Developers

Hey, I know that!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Dynamically typed

16

Page 17: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Object-based

17

Page 18: JavaScript for PHP Developers

But not how you think

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Object-oriented

18

Page 19: JavaScript for PHP Developers

First class, baby!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Functional

19

Page 20: JavaScript for PHP Developers

Like giving clay to a monkey

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Malleable

20

Page 21: JavaScript for PHP Developers

You mean I don't have to memorize 4,500 function names?

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010

Core is pretty darn small

21

Page 22: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201022

Core Objects Core Global FunctionsBoolean decodeURINumber decodeURIComponentString encodeURIArray encodeURIComponentObject evalFunction isFiniteRegExp isNaNDate parseFloat

parseInt

Core JS

Page 23: JavaScript for PHP Developers

All the cool stuff!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201023

What's missing?

Page 24: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201024

File i/o

Page 25: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201025

Networking

Page 26: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201026

DB APIs

Page 27: JavaScript for PHP Developers

Yep, the DOM is not part of JavaScript

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201027

DOM

Page 28: JavaScript for PHP Developers

Please don't leave yet.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201028

So what's it good for?

Page 29: JavaScript for PHP Developers

What?

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201029

Asynchronous actions

Page 30: JavaScript for PHP Developers

Oh!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201030

Like GUI stuff

Page 31: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201031

Browsers!

Page 32: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201032

Web Runtime Platforms!

Page 33: JavaScript for PHP Developers

Dear God

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201033

Widget engines!

Page 34: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201034

Server-side platforms

Page 35: JavaScript for PHP Developers

http://nodejs.org/

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201035

Node.js

Page 36: JavaScript for PHP Developers

http://narwhaljs.org/

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201036

Narwhal

Page 37: JavaScript for PHP Developers

http://code.google.com/p/v8cgi/

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201037

v8cgi

Page 38: JavaScript for PHP Developers

But it's super fun!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201038

SSJS isn't terribly mature

Page 39: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201039

Syntax

Page 40: JavaScript for PHP Developers

Like PHP!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201040

C/Java-like

Page 41: JavaScript for PHP Developers

But they can.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201041

Variable names don't start with '$'

Page 42: JavaScript for PHP Developers

Not dot.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201042

Concatenation with '+'

Page 43: JavaScript for PHP Developers

Not '->'. You will screw this up.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201043

Dot for members. Or []

Page 44: JavaScript for PHP Developers

You will also screw this up.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201044

Always case-sensitive

Page 45: JavaScript for PHP Developers

But you had better always use them

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201045

Semicolons are optional

Page 46: JavaScript for PHP Developers

Semicolons!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201046

CODE TIME

Page 47: JavaScript for PHP Developers

"Primitives"

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201047

Data Types

Page 48: JavaScript for PHP Developers

Integers and floats

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201048

Numbers

Page 49: JavaScript for PHP Developers

Truthy

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201049

Booleans

Page 50: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201050

Strings

Page 51: JavaScript for PHP Developers

Not NULL, not Null.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201051

null

Page 52: JavaScript for PHP Developers

Declared, but no value set. Not the same as null

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201052

undefined

Page 53: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201053

That's it.

Page 54: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201054

Other elements

Page 55: JavaScript for PHP Developers

MDC: "Named containers for values"

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201055

Objects

Page 56: JavaScript for PHP Developers

All objects

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201056

Arrays, Date, RegExp

Page 57: JavaScript for PHP Developers

MDC: "Procedures your application can perform"

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201057

Functions

Page 58: JavaScript for PHP Developers

Hang on!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201058

Scope

Page 59: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201059

More bleed than PHP

Functional scope only

Page 60: JavaScript for PHP Developers

No need for global declaration

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201060

Globals automatically available

Page 61: JavaScript for PHP Developers

With or without

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201061

Declaring variables

Page 62: JavaScript for PHP Developers

scope maintained

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201062

With var

Page 63: JavaScript for PHP Developers

Oops! Automatically global

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201063

Without var

Page 64: JavaScript for PHP Developers

window in browsers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201064

Globals are properties ofglobal object

Page 65: JavaScript for PHP Developers

globals!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201065

CODE TIME

Page 66: JavaScript for PHP Developers

This is awesome

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201066

Closures

Page 67: JavaScript for PHP Developers

Anything within context of function declaration is fair game

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201067

Using a var from outside function

Page 68: JavaScript for PHP Developers

Closures

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201068

CODE TIME

Page 69: JavaScript for PHP Developers

Literally

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201069

Literals

Page 70: JavaScript for PHP Developers

Right.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201070

Numbers

Page 71: JavaScript for PHP Developers

Yep.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201071

Booleans

Page 72: JavaScript for PHP Developers

Hmmm.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201072

RegExp

Page 73: JavaScript for PHP Developers

Hey there.

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201073

['a','r','r','a','y','s'];

Page 74: JavaScript for PHP Developers

Oh snap!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201074

{object:"literals"};

Page 75: JavaScript for PHP Developers

Literals

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201075

CODE TIME

Page 76: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201076

Operators

Page 77: JavaScript for PHP Developers

+ , = == === < > ! && ||

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201077

Mostly like PHP

Page 78: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201078

this

Page 79: JavaScript for PHP Developers

Remember, no classes in JS

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201079

new

Page 80: JavaScript for PHP Developers

Does this key exist?

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201080

in

Page 81: JavaScript for PHP Developers

"is X of type Y?"

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201081

instanceof

Page 82: JavaScript for PHP Developers

Returns string of core type

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201082

typeof

Page 83: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201083

typeof returnstypeof {} "object"typeof function() {} "function"typeof new Function(); "function"typeof true "boolean"typeof new Date(); "object" // not "date"; use instanceoftypeof [1,2,3] "object" // not "array"typeof NaN "number"typeof null "object"typeof undefined "undefined"

Page 84: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201084

Type conversion

Page 85: JavaScript for PHP Developers

Radix is optional, but Douglas Crockford will hate you

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201085

parseInt(val, [radix])

Page 86: JavaScript for PHP Developers

Like parseInt, returns NaN if cannot convert

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201086

parseFloat(val)

Page 87: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201087

String(obj)

Page 88: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201088

Number(obj)

Page 89: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201089

Boolean(obj)

http://jibbering.com/faq/notes/type-conversion/

Page 90: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201090

Functions

Page 91: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201091

In the procedural tradition

Page 92: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201092

As objects

Page 93: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201093

As constructors

with new

Page 94: JavaScript for PHP Developers

An array, kind of

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201094

Function arguments

Page 95: JavaScript for PHP Developers

Fun with functions

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201095

CODE TIME

Page 96: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201096

Objects

Page 97: JavaScript for PHP Developers

Or associative arrays

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201097

As hashes

Page 98: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201098

As static modules

Page 99: JavaScript for PHP Developers

Objects as modules

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 201099

CODE TIME

Page 100: JavaScript for PHP Developers

Not a word

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010100

As instance-able objects

Page 101: JavaScript for PHP Developers

Just make the object and have a constructor func

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010101

No classes

Page 102: JavaScript for PHP Developers

No public, private, protected

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010102

No visibility levels

Page 103: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010103

Prototypes & inheritance

Page 104: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010104

Every object has a prototype

Page 105: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010105

Prototype providesattributes of object

Page 106: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010106

Modifying prototype changesall objects that use it

Page 107: JavaScript for PHP Developers

points to constructor function of object

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010107

Prototype has .constructor

Page 108: JavaScript for PHP Developers

Prototypes and inheritance

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010108

CODE TIME

Page 109: JavaScript for PHP Developers

Kinda suck in JS

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010109

Dates

Page 110: JavaScript for PHP Developers

Almost a necessary evil

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010110

eval()

Page 111: JavaScript for PHP Developers

That again

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010111

Malleability

Page 112: JavaScript for PHP Developers

Cookies???

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010112

BREAK TIME

Page 113: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010113

JS in the browser

Page 114: JavaScript for PHP Developers

Non-sequential, long-running

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010114

Execution model

Page 115: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010115

Single threaded

Page 116: JavaScript for PHP Developers

Oh the humanity

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010116

Browser compatibility

Page 117: JavaScript for PHP Developers

Woo wee!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010117

DOM APIs

Page 118: JavaScript for PHP Developers

Words and pictures and movin' stuff!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010118

Elements and events

Page 119: JavaScript for PHP Developers

Trust me

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010119

These are terrible

Page 120: JavaScript for PHP Developers

They suck

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010120

I'm not going to teach you these

Page 121: JavaScript for PHP Developers

Basically fixes everything

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010121

Just use jQuery

Page 122: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010122

HTTP interaction

Page 123: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010123

The XMLHttpRequest Object

GETing and POSTing

Page 124: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010124

JSON is love

Page 125: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010125

Use JSON2.js

Page 126: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010126

Newer browsers havenative implementations

Page 127: JavaScript for PHP Developers

Web APIs, woooooooooo!

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010127

CODE TIME

Page 128: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010128

Resources

Page 129: JavaScript for PHP Developers

<Name of Talk> - <Who> - <Where> - <When>

Resources:Code

129

•SpazCorehttp://github.com/funkatron/spazcore

•Underscore.jshttp://documentcloud.github.com/underscore/

•http://delicious.com/funka7ron/javascript

Page 130: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010130

Resources:Web

•Mozilla Dev Center: Code JavaScript Guidehttps://developer.mozilla.org/en/Core_JavaScript_1.5_Guide

•Mozilla Dev Center: Core JavaScript Referencehttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference

•Eloquent JavaScripthttp://eloquentjavascript.net/

•comp.lang.javascript FAQhttp://jibbering.com/faq/

•Nicholas C. Zakas' Bloghttp://www.nczonline.net/

•John Resig's Bloghttp://ejohn.org/

•http://wtfjs.com/

Page 131: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010131

Resources:Books

•JavaScript: The Definitive GuideDavid Flanagan

•JavaScript: The Good PartsDouglas Crockford

•High-Performance JavaScriptNicholas C. Zakas, et al

•JavaScript PatternsStoyan Stefanov

Page 132: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010132

References

Page 133: JavaScript for PHP Developers

JavaScript for PHP Developers - Ed Finkler - ZendCon - November 1, 2010133

References

•Mozilla Dev Center: Core JavaScript Guide•Eloquent JavaScript