================ JavaScript Basics ================= Vars ----- vars are case sensitive, and must start with letter .. code-block:: javascript var x=5; var name="value" Looping n Shit ============== .. code-block:: javascript for (var = startval; var <= endval; var = var + increment){ } for(i=0, j=0, k=0; i<50; i++, j++, k++){ } for (var in array){ } while (var <= endval) { } do { //code }while(var <= endval); try { //somethin } catch(err) { //do something } break; breaks from loop continue; breaks from current loop, move to next val Syntax n Shit ============= :: Comments --------------------------------- // /* */ Arithmetic +, -, *, /, %, ++, -- Assignment =, +=, -=, *=, /=, %= Comparison == equal to === equal to (value + type) != not equal to > greater than < less than <= less than or equal >= greater than or equal && and || or Escapes --------------------------------- \' single quote \" double quote \& ampersand \\ backslash \n newline \r carriage return \t tab \b backspace \f form feed Bool Objects --------------------------------- False 0, -0, null, "", false, undefined, Non True everything else Objects ======== are essentialy key-value pairs .. code-block:: javascript var obj = { "name": "myObj", "date": "10/4/03" }; //You don't need to quote variables the following will be the same var obj = { name: "myObj" date: "10/4/03" }; Objects members can be called like a dictionary or an object:: obj.name obj["name"] Objects are mutable, key-value pairs can be added .. code-block:: javascript var obj = { name: "foo" }; obj.age = 5 You can create objects within objects in javascript .. code-block:: javascript var obj = { name: "foo", date: { day: 1, month: 3, year: 2012 } }; Scope ------ you can get values of an outer object from an inner object .. code-block:: javascript var obj = { date: { day: 1, month: 1, year: 2012, formatDate: function() { return this.month + "/" + this.day + "/" + this.year; } } }; when you invoke a function as a method i.e. obj.date.formatDate() then you get access to properties of obj:: obj.date.formatDate(); // "1/1/2012" Arrays ====== .. code-block:: javascript var myArr = new Array(); arrays are objects arrays have a length property array has a push operator .. code-block:: javascript var stack = ["a", "b"]; stack.push("c"); // returns 3 (the new length?) and stack now equals ["a", "b", "c"] stack["push"]("d"); //returns 4 and stack now equals ["a", "b", "c", "d"] stack[10] = "j"; //will add j to 10th number you can add properties to array objects .. code-block:: javascript var A = ["a", "b"]; A.newProperty = "hello"; for-in loop will print all indexes as well as properties .. code-block:: javascript var date = { day: 4, month: 2 }; for(var i in date) { console.log(i); //returns day, month console.log(date[i]); //returns 4, 2 console.log(date.i); //ERROR: this will not work } Functions ========= function .. code-block:: javascript function functionname(var, var2) { //code goes here } function literal definition .. code-block:: javascript var square = function(var, var2) { //code goes here } functions are objects you can add properties to functions .. code-block:: javascript //property added to foo function object foo.grilledChicken = "YUM!"; SYNTAX ====== :: // Oneline comment /**/ Multi-line comment var x=5; vars are case sensitive, var name="value" and must start with letter Numbers ---------- Math Math.round(double) Math.random() Math.max(9,5) Math.min(#, #) Special Numbers Infinity Nan Not a number (Does not exist) Can't be compared to other numbers or itself (isNan used to test if num is Nan) hex literal begins with "0x or 0X":: 0xff //255 0xCAFE911 some implementations of JS allow octal literals. octal literals begin with 0 and followed by #'s 0-7:: 0377 //255 avoid writing literals with a leading zero! you cannot known wheather an implementation will interpret it as an octal or decimal value IO ===== document.write() Like system.out.print(), cout, ect. Strings ======= :: \u unicode concat with + ""'hey'"" / '""hey""' --> 'hey' / "hey" s.length s.charAt(s.length-1) s.substring(1,4) s.indexOf('a') double quotes can be in single quoted area and vice versa:: "Text 'yo' more text" Tricks and Methods ================== A way to dynamicaly access a variable Look threw DOM for all elements with specified tag name .. code-block:: javascript var myVariable = document.getElementById(myElement); myVariable.style.display = "block"; myVariable.style.backgroundColor = "#f00"; myVariable.style.border = "solid 1px #00f"; Create an array .. code-block:: javascript var myLinkCollection = document.getElementsByTagName("a"); for (i = 0; i < myLinkCollection.length; i++) { if (myLinkCollection[i].className == "link_class") { myLinkCollection[i].onclick = function() { myLinkCollection[i].style.backgroundColor = "#f00"; } } } Create a new element .. code-block:: javascript var myNewListItem = document.createElement("li"); var myNewLink = document.createElement("a"); Remove Child element .. code-block:: javascript var myLinkList = document.getElementById("list"); var myRemovedLink = myLinkList.lastChild; myLinkList.removeChild(myRemovedLink); Get Attribute .. code-block:: javascript var myLinkFive = document.getElementById("link_5"); var myLinkAttribute = myLinkFive.getAttribute("rel"); Random Style Sheet .. code-block:: javascript function rand(){ return Math.round(Math.random()*(css.length-1)); } var css = new Array( '', '', '', '', ); .. code-block:: html rand = rand(); document.write(css[rand]); Super Class Inheritance with JavaScript ======================================= - Object Oriented - Should not rely on the DOM Prototypal Inheritance ---------------------- - No classes - just Objects - Objects inherit from Objects - Objects contain a "link" to another object. The "parent" object is just a regular object Events and Responses ==================== .. code-block:: javascript var a = document.querySelector('a'); // grab the first link in the document a.addEventListener('click', ajaxloader, false); //ajaxloader() function is the even listener Functional Programming ====================== Array Comprehension ------------------- [i * i for i of [1, 2, 3]]; Map --- [1, 2, 3].map(function (i) { return i * i }); [650,123,4567].map(String).join('-'); Filter ------ [1,4,2,3,-8].filter(function(i) { return i < 3 }); this ---- this in the global context refers to the window object, *this* is also global inside functions if *use strict* is not being used. .. code-block:: javascript console.log(this === window); // true //if not using strict function checkThisOut () { console.log(this === window); // true } //if using stricut function checkThisOut () { console.log(this === window); // false }