A container of related information. Objects have properties those can be numbers, strings, arrays, functions, and even other objects.
Creating an object with javascript
Object Literal
var myBox = {}; // Curly brackets says to make a new object
var myBox = { height : 12, width: 23, length: 10, volume: 480, material: "cardboard", contents: ["Item 1","Item 2", "Item 3"] };
Accesing object's properties
Sample with the dot operator
Following the sample above, in order to access the width property of the object myBox, we must do the next
myBox.width; // we get "23" myBox.materials; // we get "cardboard" myBox.contents; // we get ["Item 1","Item 2", "Item 3"]
Sample with the array way
myBox["width"]; // we get "23" myBox["material"];// we get "cardboard"
Changing property values of an object
Sample
myBox.width = 12; myBox.contents.push("Some other book");
Adding properties even after the object creation
Sample with the dot operator
The next properties have not been added at the objects creation process
myBox.weight = 24; myBox.destination = "Miami";
Sample with the array way
The next property was not created at the object's birth, note that the property has spaces.
myBox["# of stops"] = 2;
Accessing properties of an object through expressions
Suppose we have these properties at the myBox object
- destination1
- destination2
for (var i = 1; i <= 2; i++){ console.log( myBox["destination"+i]); }
Deleting properties
Syntax
delete myBox.contents;
Note : delete will always return true.
An interesting function
This function will set an object using expressions and array like access to the object's properties
function addBook (box, name, writer){ box["# of Books"]++; box["book" + box["# of Books"]] = {title:name, author: writer}; }
Accessing nested objects properties
Sample console.log(myBox.book1.title);
Objects functionality
Properties can also be functions for example (we can see two function declarations as a sample to see the difference among an internal function and a external one)
var aquarium = { Nemo : { type: "fish", species: "clownfish", length: 3.7 }, Marlin: { type: "fish", species: "clownfish", length: 4.1 }, addCritter : function (name, type, species, length){ this[name] = {type: type, species: species, length: length}; } } // External function, that has a container reference variable function addCritter(container, name, type, species, length){ container[name] = {type: type, species: species, length: length}; } // Call to the object's addCritter function aquarium.addCritter("Bubbles", "fish", "yellow tang", 5.6); // Create an anonymus function aquarium.takeOut = function ( name ) { this[name].name = name; // This will create a property name for the object to be removed var temp = this[name]; delete this[name]; return temp; }; // Using the anonymous function var fishOutOfWater = aquarium.takeOut("Marlin");
Enumeration with the FOR-IN loop
The for-in loop allows us to access each enumerable property in turn
Sample
// key is just a name from which we will access the property later on for( key in aquarium ){ console.log(key); } // Output, check that all of these are properties of the aquarium object // Nemo // Bubbles // addCritter // takeOut var numFish = 0; for (key in aquarium){ if (aquarium[key].type == "fish"){ numFish++; } } // aquarium["addCritter"].type; Well since aquarium is a function, the result will be undefined // Creating a anonymous function aquarium.countFish = function(){ for (key in this){ if (this[key].type == "fish"){ numFish++; } } }; var poorDory = aquarium.takeOut("Dory"); aquarium.countFish();
Accesing Object´s property propertis
Check out this example
var rockSpearguns = { Sharpshooter: {barbs: 2, weight: 10, heft: "overhand"}, Pokepistol: {barbs: 4, weight: 8, heft: "shoulder"}, Javelinjet: {barbs: 4, weight: 12, heft: "waist"}, Firefork: {barbs: 6, weight: 8, heft: "overhand"}, "The Impaler": {barbs: 1, weight: 30, heft: "chest"} }; function listGuns(guns) { for (var speargun in guns) { // modify the log message here console.log("Behold! " + speargun + ", with " + guns[speargun].heft + " heft!"); } } listGuns(rockSpearguns); // Output Behold! Sharpshooter, with overhand heft! Behold! Pokepistol, with shoulder heft! Behold! Javelinjet, with waist heft! Behold! Firefork, with overhand heft! Behold! The Impaler, with chest heft!