Getting Started with Javascript

Post on 19-Oct-2014

1.150 views 0 download

Tags:

description

This was prepared for delivering a session about Javascript to newbies.

Transcript of Getting Started with Javascript

Getting Started with

Akshay Mathur@akshaymathu

@akshaymathu 2

Ground Rules• Post on FB and Tweet now• Disturb Everyone during the

session– Not by phone rings– Not by local talks– By more information and questions

@akshaymathu 3

Let’s Know Each Other

• Do you code?• OS?• Programing Language?• HTML?• Javascript?• JSON?• Why are you attending?

@akshaymathu 4

Akshay Mathur

• Founding Team Member of– ShopSocially (Enabling “social” for retailers)– AirTight Neworks (Global leader of WIPS)

• 15+ years in IT industry– Currently Principal Architect at ShopSocially– Mostly worked with Startups• From Conceptualization to Stabilization• At different functions i.e. development, testing, release• With multiple technologies

@akshaymathu 5

JavaScript

• Born in 1995 at Netscape• Not at all related to Java• Syntax influenced by C• Interpreted ECMA scripting lanuage• Dynamically typed• Object Oriented as well as Functional• Prototype based

@akshaymathu 6

Typical Usage

• Web programing– Client side

• Web pages• Browser plugins

– Server side• SSJS (not in use)• NodeJS

• PDF documents• Desktop Widgets• MongoDB

Language Reference

@akshaymathu 8

Comments

• Single line– Starts with //– Can also be used after a statement

• Multi line– Starts with /* and ends with */

@akshaymathu 9

Statements

• Case sensitive• Ignore whitespace• Semicolon (;) is used as delimiter for

statements• Block of statements is delimited by curly

braces ({})

@akshaymathu 10

Output

• Visible to all using DOM functionsdocument.write(‘Hello’);alert(‘How are you’);

• For developers in consoleconsole.log(“This is working”);

@akshaymathu 11

Variable

• Explicitly defining is optional– JS runtime automatically defines as needed– Defining all variables with ‘var’ keyword is good

• Loosely typed– No need to define the type (int, str etc.)

• Dynamically typed– Type changes at runtime as the value changes

var my_var = ‘Hello’;my_var = 6;

@akshaymathu 12

Data Types

• String: “1”, “Hello! How are you”• Number: 1, 2, 121.22• Boolean: true, false• Array: [1, “1”, false, {a: 10}]• Object: {lang: “JS”, val: my_var}• Null: null• Undefined: undefined• Functions: function(){}• Date: Mon, 23 Sep 2013 12:18:54 GMT

typeof “1” // String

@akshaymathu 13

Operators

• Arithmetic+, -, *, /,%, ++, --

• Assignment=, +=, -=,*=, /=, %=

• Concatenation+

• Comparison==, ===, !=,!==, >, <,<=, >=

• Logical&&, ||, !

• Conditional() ? :

@akshaymathu 14

Conditional Blocks

• If… else if … elseIf (age > 18){ can_vote = true;} else { can_vote = false;}Orcan_vote = (age>18) ? true : false;

@akshaymathu 15

For Loop

• Forfor (i=0; i<array.length; i++){ console.log(array[i]);}• For/infor (item in array){ console.log(item);}

@akshaymathu 16

While Loop

• Whilewhile (is_extra_water){ drain();}• Do/whiledo { drain();} while (is_extra_water);

@akshaymathu 17

JS Functions

@akshaymathu 19

Function

• Code block that executes on ‘call’//define the functionfunction say_hello(name){ alert(‘Hello! ‘ + name);}

//call the functionsay_hello(‘Akshay’);

@akshaymathu 20

Function Arguments

• Any number of arguments can be passed without declaring

• Named arguments are not supported

say_hello(1); // Hello! 1say_hello(); // Hello! undefinedsay_hello(‘Akshay’, ‘Mathur’);

//Hello! Akshay

@akshaymathu 21

Naming a Function

function my_func(){}

• A function may not have a name

function(){};

my_func = function(){};

@akshaymathu 22

Variable Scope

• By default all variables are global• Variables defined with ‘var’ keyword are local to the

function• It is assumed that all variables are defined in the first

linefunction(){

var my_var = ‘Hello’;console.log(msg);var2 = 6;

}

@akshaymathu 23

Return Values

• Anything can be returned from a function using return statement

function sqr(x){var sq = x * x;

return sq;}

var four_sq = sqr(4);

@akshaymathu 24

Other Facts

• A function can be assigned to a variable• A function can be defined within another function• A function can return a functionfunction sqr(){ sq = function (x){

return x * x * x; }; return sq;}My_sqr = sqr(); // functionMy_sqr(3); // 27

25

Global Functions• encodeURI(),

encodeURIComponent() Encodes a URI

• decodeURI(), decodeURIComponent() Decodes a URI

• escape() Encodes a string • unescape() Decodes an encoded

string

• String() Converts an object's value to a string

• Number() Converts an object's

value to a number

• isFinite() Determines whether a value is a finite, legal number

• isNaN() Determines whether a value is an illegal number

• parseInt() Parses a string and returns an integer

• parseFloat() Parses a string and returns a floating point number

• eval() Evaluates a string and executes it as if it was script code

@akshaymathu

@akshaymathu 26

JS Objects

@akshaymathu 28

Objects

• Everything in JS is an object (instance)“string”.length // 6“str”.length.toFixed(2) // “3.00”[‘hell’, ‘o!’].join(‘’) // ‘hello!’

• Custom objects can also be defined

@akshaymathu 29

JSON

• Javascript Object has a key and a value• Key is always string• Value can be of any type– Including another JSON object

A = {key1: value1, key2: value2};or

A = new Object();A[‘key1’] = value1;A.key2 = value2;

@akshaymathu 30

Object as Namespace

• It is a good practice to group variables and functions together in an object rather than keeping them global

var user = {};user.name = “Akshay”;user.greet = function(){ alert(‘Hello!‘.concat(user.name);};

@akshaymathu 31

Object as Named Argument• Objects can be passed to a function as an argument• They proxy for named arguments

Say_hello = function (options){ if (typeof options === ‘Object’){ options.msg = (options.msg)?options.msg : ’Hello!’; } alert(options.msg + ‘ ‘ + options.name);}

Say_hello({name: ‘Akshay’});

@akshaymathu 32

Creating Single Page Web App

Series of 3 workshopsFull Day

Hands-on

presents

@akshaymathu 34

1. Simple Web Pages

• Introduction to Web and its evolution• Web page basics and HTML tags• Styling elements• JavaScript basics• Introduction to DOM• Changing style using JavaScript• Simple DOM manipulation• Responding to user actions

@akshaymathu 35

2. Dynamic Web Pages

• Jquery JavaScript Framework• Handling DOM events• Getting data asynchronously via AJAX• Client side dynamism using JavaScript

templates• Simplify JS coding via CoffeeScript• Writing JS classes (prototypes)

@akshaymathu 36

3. Single Page App

• Understanding MVC concepts• Introduction BackboneJS and UnderscoreJS• Using Backbone models, views and router• Dealing with collections• Custom events and their handlers• Adjusting URLs for making browser buttons

work

@akshaymathu 37

Document Object Model

• Window Object– Represents the browser window– All Javascript functions and variable are attached

here by default• Document Object– Represents the page rendered inside the window– All HTML elements are available here• In the hierarchy they are attached

@akshaymathu 38

Manipulating the Web Page

• Get programmatic handle of an HTML element via Document Object Model (DOM)

var el = document.getElementByID(‘a_unique_id’);

• Change desired property of the elementel.src = “my_photo.png”

@akshaymathu 39

JS Framework

• Library for simplifying JS coding– Jquery is most popular

• Provides simple interface and syntactic sugar for common JS work– Selecting DOM element– DOM traversal and manipulation– Event handling

• Takes care of cross browser and cross version issues

@akshaymathu 40

Jquery

• Takes care of cross browser and cross version issues• Library for simplifying JS coding– Everything is via functions– Same function for get and set

• Provides simple interface and syntactic sugar for common JS work– Selecting DOM element– DOM traversal and manipulation– Event handling

@akshaymathu 41

Javascript Templates

• Dynamically creates HTML code in JS– Data driven HTML– Allows variable substitution, looping and

conditional statements• Generated HTML is inserted into the DOM for

changing part of the page on-the-fly

@akshaymathu 42

Using Template

<script type="text/x-jquery-tmpl” id=”photo">

<img src=“${photo_url}” title="${name}" />

</script>

<script type="text/javascript”>template = $(’#photo').template();t_html = $.tmpl(template, data);$(“#container”).html(t_html);

</script>

@akshaymathu 43

AJAX

• A way in web browser to communicate with server without reloading the page

• XmlHttpRequest (XHR) object can also create HTTP request and receive response– The request happens asynchronously• Other operations on page are allowed during the

request

– Received data does not render automatically• Data needs to be received in a callback function and

used programmatically

@akshaymathu 44

AJAX Call$.ajax({

url: ‘/my_ajax_target’,type: ‘POST’,DataType: ‘json’,data: {id: 2},success: function(response){

alert(‘Hello! ‘ + response.name);},

error: function(){alert(‘Please try later’);}

});

@akshaymathu 45

CoffeeScript

• A language with simple syntax– No semicolons and braces– Resembles to English– Indentation decides the code blocks

• Compiles into Javascript– Provides syntactic sugar for boilerplate code• Manage variable scope• Class instead of prototype

– Generates good quality, error free code

46

Cofeescript to Javascript

greet_me = (name) ->greeting_word = 'Hello!'alert "#{greeting_word} #{name}”

Compiles to

greet_me = function(name) { var greeting_word; greeting_word = 'Hello!'; return alert("" + greeting_word

+ " " + name); };

@akshaymathu

@akshaymathu 47

BackboneJS

• Provides MVC structure for Javascript– The model object holds data– The view object handles visual elements and

interactions– The controller object glues everything together and

provides communication amongst objects• Custom Events help writing good code and

eliminates use of global variables– The event object allows raising and handling custom

events

@akshaymathu 48

BackboneJS code in Coffeescriptclass LoginModel extends Backbone.Modelclass LoginView extends Backbone.View

initialize: =>@template = $(’#login_template').template()@render()

render: =>$(@el).html $.tmpl(@template, @model.toJSON())

events:'click #login_btn' : ’login_handler’

login_handler: (ev) =>window.mpq_track ’Login Click’

class LoginController extends Backbone.Routerinitialize: =>

@l_model = new LoginModel window.app_info@l_view = new LoginView model: model, el:

’#login_div’

@akshaymathu 49

Thanks

@akshaymathu

http://www.quora.com/Akshay-Mathur