JavaScript Basics
Link to external Javscript file
<head>
<title>Test</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script src="spectra.js" type="text/javascript" ></script>
</head>
Types
The built-in types are string
, number
, boolean
, null
, undefined
, object
.
Use typeof some_var
to get the type.
The following are considered false: false
, 0
, ""
, null
, undefined
, NaN
.
Strings
" Hello ".trim() // "Hello"
Arrays
Arrays are special objects that get their methods from Array.prototype
.
var my_array = []; // make a new empty array var my_array = [1, 4, 2]; my_array.forEach( function(element){ // do something with element } my_array.filter(function(i){return i % 2 == 0}); // [4, 2] only keeps even numbers my_array.map(function(i){return i*i}); // [1, 16, 4] my_array.reduce(function(total, currentValue, index, array){ return total += currentValue;}) // 7
Objects
var new_object = {}; // make a new empty object new_object.name = "Bill"; // create a property new_object["name"] = "Bill"; // same thing for (var key in my_object){ // iterate over an object // do something with key // value is my_object[key] }
Functions
Functions are special objects that get their methods from Function.prototype
.
var adder = { x: 1, y: 2, add: function(){return this.x + this.y;} } adder.add() // 3 adder.add.apply({x:2, y:4}) // 6 addx10 = adder.add.bind({x:10, y:20}) addx10() // 30
Constructors
function Fruit (theColor, theSweetness, theFruitName, theNativeToLand) { this.color = theColor; this.sweetness = theSweetness; this.fruitName = theFruitName; this.nativeToLand = theNativeToLand; this.showName = function () { console.log("This is a " + this.fruitName); } this.nativeTo = function () { this.nativeToLand.forEach(function (eachCountry) { console.log("Grown in:" + eachCountry); }); } } var mango = new Fruit ("Yellow", 8, "Mango", ["South America", "Central America", "West Africa"]);
Counter Example
function Counter() { this.things = {}; // name -> count this.add = function (name){ if (name in this.things){ this.things[name]++; } else { this.things[name] = 1; }; }; this.getCount = function(name){ if (name in this.things){ return this.things[name]; } else { return 0; }; }; }; var myCounter = new Counter();
Prototypes
Every object has a prototype
property. This can be used to add attributes or methods after the constructor has been defined:
Fruit.prototype.peeled = false; Fruit.prototype.peel = function() { this.peeled = true; }
Closures
Offers a way to hide data inside an object:
function createIncrementer(){ var i = 0; // i is not accessible outside return { increment: function(){ return ++i; } }; } obj = createIncrementer(); obj.increment(); obj.increment(); obj.increment(); // 1, 2, 3