Codecabulary Home / Learn JavaScript / Objects
Javascript Data Types
There are six data type in Javascript. Five are primitive, immutable data types--string, integer, boolean, null, and undefined, which should be familiar from other languages. The sixth, object, is a complex, mutable data type consisting of unordered key-value pairs of primitive data types, as in a hash (Ruby) or dictionary (Python).
The Object Data Type
These key-value pairs are called properties in Javascript; if the properties are functions, they're called methods.
var cat = {
name: "Scout", // Property
age: 2,
meow: function() { // Method
console.log("meow");
}
};
Naming Object Properties
Property names in Javascript can be strings or numbers. String-typed names can be accessed via the dot syntax or the bracket syntax, which may be familiar from other languages:
cat.name
> Scout
cat['name']
> Scout
Number-typed names must be accessed via the bracket notation:
cat.4
> Syntax Error
cat['4']
> undefined
Reference Data vs Primitive Data
Basic variables store primitive data types:
var cat = "Scout"
Primitive data types are stored directly on the variable, so if you make a copy of the data, you make a full copy:
var cat2 = cat
cat = "Ruby"
cat2
> Scout
As we see in the example above, changing the value of the primitive String datatype on cat has no effect on the copy, since the copy's data was stored directly onto a new variable.
Objects' properties, on the other hand, store a reference data type, which is distinct from the primitive data type in that it stores a reference, not data directly onto the variable.
var cat = { name: "Scout" }
var cat2 = cat
cat.name = "Ruby"
cat2.name
> Ruby
We see here that updating the value of a reference data type updates all references to that data.
Properties Have Attributes
Objects' data properties (aka not methods) consist of a key-value pair and three default attributes:
* Configurable: Specifies whether the property can be deleted or changed
* Enumerable: Specifies whether the property can be returned in a for/in loop
* Writable: Specifies whether the property can be changed
How to Create Objects:
Objects are created in two ways:
-
Object Literals Object literals are defined using the curly bracket notation:
var cat = {}; var house = { address: '248 Brown Street', city: 'Waltham', state: 'MA' };
-
The Object Constructor To call the constructor, use the
new
keyword:var cat = new Object(); cat.name = "Scout"; cat.meow = function() { console.log('meow'); };
Patterns for Creating Objects
Object-oriented programming relies on the ability to create classes, which you can think of like taxonomy. A class is a codification of the properties of an essential type of thing; taxonomists work to get as precise as possible regarding the differences between different species, so that a lion is fundamentally different from a house cat. When you instantiate a class, you create a single member of that essential type (an instance); if you create the house cat "Scout", you can also create the house cat "Ruby" from the same essential house cat class.
Javascript doesn't support "classes" in the traditional object-oriented sense, but we can create constructor functions (like new Object
) to define something like classes in Javascript:
function HouseCat (name, meow) {
this.name = name;
this.meow = function() {
console.log(meow);
};
};
var scout = new HouseCat ("Scout", "mrow mrow mrow!");
scout.name
> Scout
scout.meow
> mrow mrow mrow!
Now if you want to change the HouseCat function, you can do so in a centralized location. To describe new instances of HouseCat, you only need describe their differences (their name and meow), not the myriad ways in which they are functionally similar.