Javascript basics

Post on 22-May-2015

288 views 1 download

Tags:

description

Presentasjon fra Peanuts Talks som er en intern arena for å dele kunnskap med kollegaer. Presentasjonen ble holdt av Joar Gullestad Pettersen

Transcript of Javascript basics

JavaScript Basics

Joar Gullestad Pettersen

JavaScript Data Types

String, Number, Boolean, Array, Object, Null, Undefined

Dynamic Types

• var x;              

Dynamic Types

var x;                // x is: undefined

Dynamic Types

var x;                // x is: undefined

x = 5;           // x is set to a Number: 5

Dynamic Types

var x;                // x is: undefined

x = 5;           // x is set to a Number: 5

x = "Bond";         // x is changed to a String: "Bond"

Strings

var car = "Telsa Model S";

var car2 = 'Tesla Model S';

Numbers

• var x = 42;      // Written without decimals

• var y = 13.37; // Written with decimals

• var z = 10e3;  // Exponential notation

Booleans

• var x = true;

• var y = false;

Array

var frukt = new Array();

frukt[0] = "eple";

frukt[1] = "banan";

frukt[2] = "pære";

["eple", "banan", "pære"]

Array 2

var frukt = new Array("eple", "banan", "pære");

["eple", "banan", "pære"]

Array 3

var frukt = ["eple", "banan", "pære"];

["eple", "banan", "pære"]

Array 4

• var frukt = ["eple", "banan", "pære"]

• frukt.pop(); // ["eple", "banan"]

• frukt.push("tomat"); // ["eple", "banan", "tomat"]

• frukt.shift(); // ["banan", "tomat"]

• frukt.unshift("tomat"); // ["tomat", "banan", "tomat"]

Objects

• Everything is an Object

Objects

• Everything is an Object

• Booleans can be objects or primitive data treated as objects

• Numbers can be objects or primitive data treated as objects

• Strings are also objects or primitive data treated as objects

• Dates, Maths, Regular expressions, Arrays and functions are always objects

Object literalAn object is just a special kind of data,

with properties and methods.

var person = {

firstName: "John",

lastName: "Doe",

id: 5

};

Object literalAn object is just a special kind of data,

with properties and methods.

var person = {

firstName: "John",

lastName: "Doe",

id: 5

};

person.id; // 5

Object literalAn object is just a special kind of data,

with properties and methods.

var person = {

firstName: "John",

lastName: "Doe",

address: {

street: "Strandsvingen",

number: "14B"

}

};

person.address.street; // "Strandsvingen"

Functionsa block of code that will be executed when "someone" calls

it:

function add(a, b) {

return a + b;

}

var add = function(a, b) {

return a + b;

}

Object Constructor

function Person(firstName, lastName) {

this.firstName = firstName;

this.lastName = lastName;

}

var randomPerson = new Person("John", "Doe");

Object

var randomPerson = new Object();

randomPerson.firstName = "John";

randomPerson.lastName = "Doe";

Boolean expressions

if (a == 2) {//if this is true

//do this...

}

Type coercion

• When JavaScript are unsure what you mean, It makes a guess

• Example:

if ('false') { alert("true"); }

• «A String is obviously not true or false, you probably mean true!»

True!

• if (true) { alert("true"); } // alerts "true"

• if ('false') { alert("true"); } // alerts "true"

• if ([]) { alert("true"); } // alerts "true"

• if (5) { alert("true"); } // alerts "true"

• if ({}) { alert("true"); } // alerts "true"

False

• if (false) { alert("false"); } // does nothing

• if (0) { alert("false"); } // does nothing

• if (null) { alert("false"); } // does nothing

• if (undefined) { alert("false"); } // does nothing

• if ("") { alert("false"); } // does nothing

More type coercion

1 == "1"

true == "1"

false == "0"

More type coercion

1 == "1"

true

true == "1"

false == "0"

More type coercion

1 == "1"

true

true == "1"

true

false == "0"

More type coercion

1 == "1"

true

true == "1"

true

false == "0"

true

More type coercion

1 == "1"

true

true == "1"

true

false == "0"

truefalse == "0" == 1 == true == [] == ""

More type coercion

1 == "1"

true

true == "1"

true

false == "0"

truefalse == "0" == 1 == true == [] == ""

true

Confusing?

• Solution?

Confusing?

• Solution?

• Avoid bugs| and use: ===

===

1 == true

true

1 === true

false

1 == "1"

true

1 === "1"

false

Scope & global variables

• C#/Java: anything inside curly brackets, {} , defines a scope

• Example:

if (true) {

var scopeVariable = "Test";

}

scopeVariable = "Test2"; // variable not defined

Scope & global variables

• Javascript: only functions define a new scope

• Example:

if (true) {

var scopeVariable = "Test";

}

scopeVariable; // value: "Test";

Scope & global variables

function scope1() {

var member; //is a member of the scope defined by the function example

//this function is also part of the scope of the function example

var innerScope = function() {

member= 12; // traverses scope and assigns member in scope1 to 12

};

};

Scope & global variables

function scope1() {

var member; //is a member of the scope defined by the function example

//this function is also part of the scope of the function example

var innerScope = function() {

var member= 12; // defines member in this scope and do not traverse

};

};

Scope & global variables

function scope1() {

var member; //is a member of the scope defined by the function example

//this function is also part of the scope of the function example

var bar = function() {

member= 12; // traverses scope and assigns scope1member.foo to 12

};

};

function scope2() {

member = 15; // traverses scope and assigns global.member to 15

}

Namespaces

• Not built into JavaScript

• Problem?

C# namespace

namespace Peanuts

{

}

JavaScript (Ad-hoc) namespace

var Peanuts = {}; // Object used as namespace

JavaScript (Ad-hoc) namespace

var Peanuts = Peanuts || {}; // in case it already exists

C# Namespace

namespace Peanuts

{

public class Person

{

}

}

«Classes» and «methods» ?

var Peanuts = Peanuts || {};

Peanuts.Calculator = {

add: function (a,b) {

return a + b;

},

subtract: function () {

return a - b;

}

};

Peanuts.Calculator.add(1, 2); // 3

Immediately invoked function expressions

• (function () {

• // logic/code here

• })();

Why?

• Executes an expression and therefore code immediately

• Creates «privacy» for your code (function scope ftw!)

How?

• JavaScript, parenthesis can’t contain statements.

• When the parser encounters the function keyword, it knows to parse it as a function expression and not a function declaration.

Immediately invoked function expressions

• (function () {

• // logic/code here

• })();

• The key thing about JavaScript expressions is that they return values.

• To invoke the function expression right away we just need to tackle a couple of parentheses on the end(like above).

Immediately invoked function expressions

• (function ($) {

• // logic/code here

• })(jQuery);

Revealing module pattern

var Peanuts = Peanuts || {};

Peanuts.Calculator = function () {

var add = function(a, b) {

return a + b;

};

var subtract = function(a, b) {

return a - b;

};

return {

add: add,

subtract: subtract

};

};

Peanuts.Calculator().add(1, 2); // 3

Revealing module pattern 2

var Peanuts = Peanuts || {};

Peanuts.Calculator = (function () {

var add = function(a, b) {

return a + b;

};

return {

add: add,

};

})();

Peanuts.Calculator.add(1, 2); // 3

Revealing module pattern 3

var Peanuts = Peanuts || {};

Peanuts.Calculator = (function () {

var PI = 3.14; // private variable!

var getCircleArea = function(r) {

return PI * r * r;

};

return {

getCircleArea: getCircleArea // public method

};

})();

Peanuts.Calculator.getCircleArea(2); // 12.56