the javascript programming language

Post on 15-Jul-2015

82 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Mohammed Irfan

JavaScript is a stripped down version of Java

JavaScript does not exist outside browsers

JavaScript is inconsistent and buggy

JavaScript is not object-orientated

Birth of Mocha, then rename to LiveScript

Netscape and Sun collaboration for Java in browsers;

LiveScript gets renamed to JavaScript

IE team reverse engineers JavaScript to JScript

Browser war begins

Standardization of JavaScript at ECMA; ECMAScript becomes the official name

Rise of Ajax

JavaScript libraries emerge

ECMAScript 5

Semicolon insertion

typeof and instanceof

with and eval

== and !=

new

Loose Typing

Dynamic Objects

Object / Array Literals

Functions / Lambdas

Self

prototypal inheritance

dynamic objects

Scheme

lambda

loose typing

Java

syntax

conventions

Perl

regular expressions

Numbers

Strings

Booleans

Objects

Functions

Number

String

Boolean

Object Function

Array

Date

RegExp

Null

Undefined

Only one number type

No integers

64-bit floating point IEEE-754 (aka “Double”)

Numbers are Objects

(a + b) + c === a + (b + c)

Produces false for some values of a, b, c.

Integers under 9007199254740992 (9

quadrillion) are ok.

9007199254740992 === 9007199254740992 + 1

a = 0.1;

b = 0.2;

c = 0.3;

(a + b) + c === a + (b + c)

> false

Special number: Not a Number

Result of undefined or erroneous operations

Toxic: any arithmetic operation with NaN as an

input will have NaN as a result

NaN is not equal to anything, including NaN

NaN === NaN is false

NaN !== NaN is true

A sequence of 0 or more 16-bit Unicode

characters

No separate character type

Characters are represented as strings with length

of 1

Strings are immutable

Similar strings are equal ( === )

String literals can use single or double quotes with

\ escapement.

Strings are Objects

> "hello".charAt(0)

h

> "hello, world".replace("hello", "goodbye")

goodbye, world

> "hello".toUpperCase()

HELLO

null = deliberately no value

undefined = no value assigned yet

Variables declared but not initialized

Object/array members that don't exist

Boolean type: true or false

Everything else is “truthy” or “falsy”

0, "", NaN, null and undefined are falsy

Everything else is truthy

Boolean operations: &&, || and !

Simple key-value pairs, like:

HashMaps in Java

Associative arrays in PHP

Key is a string; value can be anything

Key is unique within an object

var obj = new Object();

Or

var obj = {};

These are semantically equivalent; the second is

called object literal syntax and is more

convenient.

obj.name = "My Name"

var name = obj.name;

Or

obj["name"] = "My Name";

var name = obj["name"];

Semantically equivalent; the second uses strings

so can be decided at run-time (and can be

used for reserved words)

var obj = {

name: "Carrot",

"for": "Max",

details: {

color: "orange",

size: 12

}

}

> obj.details.color

Orange

> obj["details"]["size"]

12

Iterate over the keys of an object:

var obj = { 'name': 'Simon', 'age': 25 };

for (var attr in obj) {

alert (attr + ' = ' + obj[attr]);

}

Not to be used with Arrays

A special type of object: Keys are whole numbers, not strings.

Use [] syntax, just like objects

> var a = new Array();> a[0] = "dog";> a[1] = "cat";> a[2] = "hen“;> a.length3 No such thing as “Associative Arrays”

More convenient notation:

> var a = ["dog", "cat", "hen"];

> a.length

3

var a = [10, "dog", false, "elephant"];

(you can have mixed content in arrays)

> var a = ["dog", "cat", "hen"];

> a[100] = "fox";

> a.length

101

typeof a[90] == 'undefined'

array.length is always one more than the highest index

The safest way to append new items is:

a[a.length] = item;

New variables are declared using the varkeyword:

var a;

var name = "my name";

If you declare a variable without assigning it to

anything, its value is undefined.

If you forget the var, you get a global variable.

Never, ever do this – not even if you mean it.

Global variables are visible everywhere

Blocks do not have scope

Variables defined inside blocks are hoisted to

the top and are visible outside the block

Functions have scope

Variables defined inside function are visible

throughout the function and its inner functions

var a;

//...

function F() {

var b;

//...

function N() {

var c;

//...

};

}

Three different purposes of functions: as sub-routine / procedure

as lambda (a block of executable code)

as object constructor

Functions are first-class: can be assigned to a variable

can be passed as argument to any function

can be returned from any function

can be a member of any object

can be created at run time

Functions can be created inside another function

function add(x, y) {

var total = x + y;

return total;

}

var add = function(x, y) {

var total = x + y;

return total;

};

var add = function some_func(x, y) {

var total = x + y;

return total;

};

If nothing is explicitly returned, return value is undefined

Parameters: “They’re more like... Guidelines”

Missing parameters are treated as undefined:

> add()

NaN // addition on undefined

You can pass in more arguments than

expected:

> add(2, 3, 4)

5 // added the first two; 4 was ignored

The arguments special variable provides access to arguments as an array-like object

function add() {

var sum = 0;

for (var i = 0, j = arguments.length; i < j; i++) {

sum += arguments[i];

}

return sum;

}

> add(2, 3, 4, 5)

14

$('#some-id').click(function(evt) {

// do something on click event

};

var add = function(x) {

return function(y) {

return x + y;

};

};

function Person(name) {

this.name = name;

this.getName = function() {

return this.name;

};

}

var person = new Person("some one");

person.getName();

> some one

top related