==== Javascript Programming ==== ==== APIs ==== Javascript is composed of libraries and different APIs. The core API is called "ECMAScript". \\ Tthere are several different other APIs which are implemented by different Browsers, or may be loaded optionally like "JQuery". \\ More about it : https://developer.mozilla.org/en-US/docs/Web/JavaScript/JavaScript_technologies_overview Some APIs which you have to know, when programming JavaScript. |Javascript Web API | Available when programming in browser | https://developer.mozilla.org/en-US/docs/Web/API | | JQuery API | Available as an optional lib. Allows to handle DOM much easier | http://api.jquery.com/ | ==== IDE ==== |Visual Studio 2013|not free| | | |Aptana IDE|free|http://www.aptana.com/products/studio3/download| Code complete, \\ Jquery too, \\ Livereload | ==== Materials ==== |Shortcuts for VisualStudio 2013| http://visualstudioshortcuts.com/2013/| ==== Glossary ==== |Variable hoisting| A Variable **declaration** is always **moved by the compiler to the top** of the function. But the initialization stays where it was. // functions are equivalent because of variable hoisting javascript>function {console.log(a); var a=2;} javascript>function {var a; console.log(a); var a=2;} | |Closures|Closures is - when a function is returned, which uses existing private variables. // function returns a function which uses internal variables! function getClosure(name) { // private variable var greetings = "Hello "+name; //anonymous function return function (name) { console.log(greetings); } } // create functions at runtime! var closureCreatedAlexFunction = getClosure("Alex"); var closureCreatedGunillaFunction = getClosure("Gunilla Johansdotter"); closureCreatedAlexFunction(); // Hello Alex closureCreatedAlexFunction(); // Hello Gunilla Johansdotter | |Function in JS | - it's an **object** - it may be a **method** - if it's within another function - it may be a **constructor** - if it is called with prefix "new" AND the function return nothing or a primitive! | |Prototypes| JS is a class-less prototype-based language. It doesn't have any classes, instead it may take existing objects as prototypes! // JS is a class-less prototype-based language. It doesn't have any classes, instead it may take existing objects as prototypes! /* functions may become constructors, when: - they return nothing or a primitive - they are called with the "new" keyword then they return an object, made from the same prototype, as constructor-function */ // has prototype Human.prototype function Human(name) { this.name = name; } // has prototype Human.prototype var alex = new Human("Alexander"); console.log("Human's name: " + alex.name); // prototypes are accessible. They may be extended. Then all the new Humans will inherit the extended functions! Human.prototype.sayName = function () { console.log(this.name) } alex.sayName(); // Alexander not is extended by "sayName()" // Object2 -> Object1 -> Object1.prototype var Object1 = {name:"Sascha", age:99} var Object2 = Object.create(Object1); // Object1 inherits Object2 | |Constuctors| Functions may be a constructor, which will then create objects. When constructor creates objects gilt - newObject.prototype==constructor.prototype /* this function is a constructor! but it may be called without new... then "this" would point to global Object "Window" and this.name="bla" would create a global var So - check the instance of this and redirect function calls to Object creation */ function Human(name) { // check "this". Return an Object if(!(this instanceof Human)){ return new Human(name); } this.name = name; } var obj1 = new Human("Conan"); // creates object "Conan" var obj2 = Human("Onan"); // creates object "Onan". No "new" is used console.log(obj1); console.log(obj2); | ==== Fallpits ==== * Don't use '==' . Use '===' instead- its more intuitive. * Eval is evil. It enables injections. * Always use 'var' to declare variables. == Importing Javascript Files == * close tag explicitely by ****, == Semicolon is set automatically every line end == // returns an object function foo(){ return{ foo:'bar' } } // returns 'undefined' function foo(){ return { foo:'bar' } } == Equality == console.log("1==1", 1 == 1); console.log("'foo'=='foo'", 'foo' == 'foo'); console.log("[1, 2, 3] == [1, 2, 3]", [1, 2, 3] == [1, 2, 3]); // false - arrays are pointers console.log("new Array(3).toString()", new Array(3).toString()); // ",," - array converted to line console.log("new Array(3) == ',,'", new Array(3) == ",,"); // true console.log("new Array(3) === ',,'", new Array(3) === ",,"); // false console.log("0.1+0.2 = ", 0.1 + 0.2); // 0.30000000000000004 - numbers are all float64 console.log("(0.1 + 0.2).toFixed(1) = ", (0.1 + 0.2).toFixed(1)); // 0.30000000000000004 - numbers are all float64 == NaN == //NaN - not a number console.log("1==1", Number("666")); // 666 console.log('Number("666diabouls")', Number("666diabouls")); // NaN console.log('parseInt("19bb") ', parseInt("19bb")); // 19 - parses until first NaN from left console.log('parseInt("19.876") ', parseInt("19.876")); // 19 console.log('parseFloat("19.876") ', parseFloat("19.876")); // 19.876 // 0.30000000000000004 - numbers are all float64 == bitlogic == // JS will always convert to int first, before applying bit logic // in JS Negation is a bit logic operator /* 3 = 0000 0000 0000 0000 0000 0000 0011 = (int)3.346346 ~3 = 1111 1111 1111 1111 1111 1111 1100 = -4 -3 = 1111 1111 1111 1111 1111 1111 1101 ~-3 = 0000 0000 0000 0000 0000 0000 0010 = 2 */ console.log('~3.346346 =', ~3.346346); // -4 - when converting console.log('~~3.346346 =', ~~3.346346); // -3 - when converting console.log('~3 =', ~3); // -4 console.log('~3.346346 =', ~3.346346); // -4 console.log('~-3 =', ~-3); // 2 // 0.30000000000000004 - numbers are all float64 **Achtung:** do not mistake the **binary negation ~** for **Not(!)** == Conversion == - JS enterpritates from left to right - JS tries to convert String to NUmber and Number to String 12 + “ or ” + “20”; // “12 or 20” “12” / 2 + 1; // 7 “day” * 2; // NaN var a = 42; // 42 a.toString(); // “42” a.toString().length; // 2 a.toString().length.toString(); // “2” == Inheritance == {{http://i.imgur.com/3fvndqx.png?600}} ==== Javascript in Browser ==== The Objects on a webpage are hierarchically organized. Details: http://www.tutorialspoint.com/javascript/javascript_html_dom.htm * **Window object**: Top of the hierarchy. It is the outmost element of the object hierarchy. * **Document object**: Each HTML document that gets loaded into a window becomes a document object. The document contains the content of the page. * **Form object**: Everything enclosed in the
...
tags sets the form object. * **Form control elements**: The form object contains all the elements defined for that object such as text fields, buttons, radio buttons, and checkboxes. {{http://www.tutorialspoint.com/images/html-dom.jpg}}