JavaScript for PHP Developers - Funkatron

1 downloads 355 Views 16MB Size Report
May 18, 2010 - aka ECMAScript 3, circa 1999. JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010. Baseline
JavaScript for PHP Developers Ed Finkler @funkatron [email protected] May 18, 2010 #tekX #js4php http://joind.in/1564

What is this?

2

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

A practical overview of JS for the PHP developer Stop c+p'ing, start writing

3

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

- get you to stop copying and pasting and start writing JS

NOT CS-oriented I'm too dumb for that

4

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

- for much smarter people than me - I'm constantly learning new stuff about JavaScript 3 years after

My experiences and best practices FWIW

5

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

JavaScript dev is opinionated JS devs are kind of dickheads

6

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

History of JavaScript

7

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Brendan Eich

8

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

"Mocha"

9

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

"LiveScript"

10

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

"JavaScript" Seemed like a good idea at the time

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

11

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Jesus Christ what a bad name

ECMAScript Yeesh

12

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Core JavaScript

13

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Baseline is JS 1.5 aka ECMAScript 3, circa 1999

14

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

There are newer versions and functionality has been added, but you can't necessarily rely on anything beyond 1.5 to be supported everywhere

Dynamically typed Hey, I know that!

15

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Object-based

16

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Object-oriented But not how you think

17

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

No classes Prototypal inheritance

Functional First class, baby!

18

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Pass functions as parameters Declare functions anywhere Anonymous ("lamba") functions used a lot

Malleable Like giving clay to a monkey

19

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

you can redefine almost anything, including core objects

Core is pretty darn small You mean I don't have to memorize 4,500 function names?

20

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Core JS Core Objects

Core Global Functions

Boolean

decodeURI

Number

decodeURIComponent

String

encodeURI

Array

encodeURIComponent

Object

eval

Function

isFinite

RegExp

isNaN

Date

parseFloat parseInt

21

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

What's missing? All the cool stuff!

22

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

File i/o

23

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Networking

24

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

DB APIs

25

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

DOM Yep, the DOM is not part of JavaScript

26

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

So what's it good for? Please don't leave yet.

27

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

So what's it good for? Please don't leave yet.

28

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Asynchronous actions What?

29

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Like GUI stuff Oh!

30

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Browsers!

31

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Web Runtime Platforms!

32

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Widget engines! Dear God

33

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Server-side platforms

34

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Node.js http://nodejs.org/

35

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Narwhal http://narwhaljs.org/

36

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

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

37

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

SSJS isn't terribly mature Don't quit your day job

38

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Syntax

39

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

C/Java-like Like PHP!

40

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Variable names don't start with '$' But they can.

41

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

They can just be '$'. Or '_'

Concatenation with '+' Not dot.

42

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Dot for members. Or [] Not '->'. You will screw this up.

43

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Always case-sensitive You will also screw this up.

44

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Semicolons are optional But you had better always use them

45

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

CODE TIME Semicolons!

46

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Data Types "Primitives"

47

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Numbers Integers and floats

48

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Booleans Truthy

49

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Strings

50

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

null Not NULL, not Null.

51

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

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

52

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

That's it.

53

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Other elements

54

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Objects MDC: "Named containers for values"

55

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Arrays, Date, RegExp All objects

56

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Functions MDC: "Procedures your application can perform"

57

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Scope Hang on!

58

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

More bleed than PHP

59

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Globals automatically available No need for global declaration

60

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Declaring variables With or without

61

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

With var scope maintained

62

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Without var Oops! Automatically global

63

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Don't do this

Globals are properties of global object window in browsers

64

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

CODE TIME globals!

65

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Closures This is awesome

66

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Using a var from outside function Anything within context of function declaration is fair game

67

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Don't need to declare this with "use" as in PHP5.3

CODE TIME Closures

68

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Literals Literally

69

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Numbers Right.

70

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Booleans Yep.

71

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

RegExp Hmmm.

72

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

['a','r','r','a','y','s']; Hey there.

73

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

This is such a pain in the ass to do in PHP. numeric index-only, though

{object:"literals"}; Oh snap!

74

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

This is even worse in PHP.

CODE TIME Literals

75

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Operators

76

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Mostly like PHP + , = == === < > ! && ||

77

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

this

78

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Actually like PHP, but scope bleed means it is less predictable

new Remember, no classes in JS

79

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Returns an instance of an object Any function can be a constructor

in Does this key exist?

80

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

instanceof "is X of type Y?"

81

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

typeof Returns string of core type

82

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Less useful than you might think

83

typeof

returns

typeof {}

"object"

typeof function() {}

"function"

typeof new Function();

"function"

typeof true

"boolean"

typeof new Date();

"object" // not "date"; use instanceof

typeof [1,2,3]

"object" // not "array"

typeof NaN

"number"

typeof null

"object"

typeof undefined

"undefined"

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

"not a number" is a number, apparently

Type conversion

84

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

parseInt(val, [radix]) Radix is optional, but Douglas Crockford will hate you

85

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

parseFloat(val) Like parseInt, returns NaN if cannot convert

86

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

String(obj)

87

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Number(obj)

88

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Boolean(obj)

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

89

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Functions

90

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

In the procedural tradition

91

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

As objects

92

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

As constructors

93

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Function arguments An array, kind of

94

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

CODE TIME Fun with functions

95

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Objects

96

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

As hashes Or associative arrays

97

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

As static modules

98

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

CODE TIME Objects as modules

99

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

As instance-able objects Not a word

100

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

No classes Just make the object and have a constructor func

101

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

No visibility levels No public, private, protected

102

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Prototypes & inheritance

103

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Every object has a prototype

104

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Prototype provides attributes of object

105

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Modifying prototype changes all objects that use it

106

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Prototype has .constructor points to constructor function of object

107

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

CODE TIME Prototypes and inheritance

108

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Dates Kinda suck in JS

109

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

eval() Almost a necessary evil

110

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Malleability That again

111

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

- You can dynamically redefine almost any object property in JS - Many JS frameworks extend code objects - I generally don't like this - can cause unexpected behavior (for…in) - can cause compatibility issues - People do this because in many cases they HAVE to - JS code is so small that it, in many ways, forces strong, divergent implementations

BREAK TIME Cookies???

112

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

JS in the browser

113

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

- Most common context - Incredibly rich, diverse community - much like PHP

Execution model Non-sequential, long-running

114

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

- mem leaks become an issue

Single threaded

115

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

- web workers

Browser compatibility Oh the humanity

116

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

DOM APIs Woo wee!

117

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Elements and events Words and pictures and movin' stuff!

118

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

These are terrible Trust me

119

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

I'm not going to teach you these They suck

120

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

It's not a complete waste of your time, but…

Just use jQuery Basically fixes everything

121

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

No, it's not the only way, but it's very good, very compatible, and very popular

CODE TIME DOM manipulation and events

122

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

* Spaz Keyboard Nav Text example; * SpazMenu

HTTP interaction

123

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

JSON is love

124

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Use JSON2.js

125

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Newer browsers have native implementations

126

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

CODE TIME Web APIs, woooooooooo!

127

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

* TMDB * ShortURL

Resources

128

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Resources:Code • SpazCore http://github.com/funkatron/spazcore • Underscore.js http://documentcloud.github.com/underscore/ • http://delicious.com/funka7ron/javascript

129

- - -

Resources:Web • Mozilla Dev Center: Code JavaScript Guide https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide • Mozilla Dev Center: Core JavaScript Reference https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference • Eloquent JavaScript http://eloquentjavascript.net/ • comp.lang.javascript FAQ http://jibbering.com/faq/ • Nicholas C. Zakas' Blog http://www.nczonline.net/ • John Resig's Blog http://ejohn.org/ • http://wtfjs.com/ 130

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

Resources:Books • JavaScript: The Definitive Guide David Flanagan • JavaScript: The Good Parts Douglas Crockford • High-Performance JavaScript Various

131

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

References

132

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010

References • Mozilla Dev Center: Core JavaScript Guide • Eloquent JavaScript

133

JavaScript for PHP Developers - Ed Finkler - tek-X - May 18, 2010