; PSY 1903
PSY 1903 Programming for Psychologists

Objects

Another important compound data type in addition to Arrays is Objects which are used to represent a collection of key-value pairs. Each key is associated with a value. Objects provide a way to access data based on keys.

Example:

let responses = {
    correct: 3,
    incorrect: 2,
    pass: 4
};

Object syntax:

  • Defined using curly brackets
  • Made up of key:value pairs where a key is set to some value, separated by a semi-colon
  • Each key:value pair is separated by a comma

Basic Object Interaction

We can extract values from Objects using the dot operator:

console.log(responses.incorrect); // 2

Similarly, we can update values by reassigning them:

responses.incorrect = 3;

Or add a new key:value pair:

responses.startTime = '2:00pm'; 

Or delete a key:value pair using the delete keyword:

delete responses.correct;

After all ove the above modifications, our updated Object would look like this:

console.log(responses); // {incorrect: 3, pass: 4, startTime: '2:00pm'}

Objects can hold any data type

In the above examples, the values in our Object were all Numbers, but you can store any data type: Strings, Numbers, Arrays, Objects, even Functions. Example:

let person = {
    // Strings
    firstName: 'Elliot',
    lastName: 'Brown',

    // Number
    age: 30,

    // Array
    hobbies: ['reading', 'gaming', 'hiking'],

    // Nested Object
    address: {
        street: '324 Western Ave',
        city: 'Cambridge',
        zipCode: '02139'
    },

    // Functions
    // Observe how the keyword *this* is used in functions to reference other properties within this object
    getFullName: function () {
        return `${this.firstName} ${this.lastName}`;
    },

    greet: function () {
        return `Hello, my name is ${this.getFullName()} and I am ${this.age} years old.`;
    },

    getAddress: function () {
        return `I live at ${this.address.street}, ${this.address.city} ${this.address.zipCode}`;
    },

    getHobbies: function () {
        return `My hobbies include ${this.hobbies.join(', ')}`;
    }
};

// Testing the functions, accessed via dot notation and invoked with parenthesis
console.log(person.greet()); // Hello, my name is Elliot Brown and I am 30 years old.

console.log(person.getAddress()); // I live at 324 Western Ave, Cambridge 02139
console.log(person.getHobbies()); // My hobbies include reading, gaming, hiking

// Testing the properties
console.log(person.firstName); // Elliot
console.log(person.age); // 30

Object vocabulary

In the context of Objects, functions are often referred to as methods, and all other items are properties.

So in the above object, we’d say getFullName is a method of the person object. Likewise, we’d say firstName is a property of the person object.

The paradigm of objects and methods is used frequently throughout JavaScript’s built-in utilities.

Example 1:

console.log('Hello World!');

Console is a built-in JavaScript object and log is one of many methods (aka functions) available within that object.

Example 2:

document.getElementById('feedback').innerHTML = 'Correct!';

Document is another built-in JavaScript Object and here we use its getElementById method which returns returns an Element Object that contains a property innerHTML.

Example 3:

prompt('What is your name?');

The prompt method is a method within JavaScript’s window Object. However, because the window object is a special global Object, we don’t have to explicitly indicate it when we invoke its methods.

// Both of the following will produce the same result,
// but it’s more common to just use "prompt":
prompt('What is your Name?');
window.prompt('What is your Name?');