DEV Community

Cover image for What are Objects in JavaScript?
Taiwo Shobo
Taiwo Shobo

Posted on

What are Objects in JavaScript?

  • Definition: Objects store keyed collections of data and more complex entities.
  • Creation:
    • Object Constructor Syntax: let user = new Object();
    • Object Literal Syntax: let user = {}; (preferred and widely used).

Literals and Properties

  • Objects are collections of properties. A property is a key: value pair.
  let user = {
    name: 'John',
    age: 30,
  }
Enter fullscreen mode Exit fullscreen mode
  • Accessing Properties:
    • Dot Notation: user.name returns "John".
    • Square Bracket Notation: user["name"] also returns "John".
  • Adding/Removing Properties:
  user.isAdmin = true // Adding
  delete user.age // Removing
Enter fullscreen mode Exit fullscreen mode

Special Cases with Keys

  • Multiword Keys: Use quotes and square brackets.
  user['likes birds'] = true
  alert(user['likes birds']) // true
Enter fullscreen mode Exit fullscreen mode
  • Dynamic Keys (Computed Properties):
    • You can use variables or expressions as keys.
  let fruit = 'apple'
  let bag = { [fruit]: 5 } // Equivalent to { "apple": 5 }
Enter fullscreen mode Exit fullscreen mode

Shorthand Properties

  • When a variable name matches the property name:
  function makeUser(name, age) {
    return { name, age } // Same as name: name, age: age
  }
Enter fullscreen mode Exit fullscreen mode

Property Name Rules

  • Object properties can use reserved words or special characters.
  • Non-string keys (e.g., numbers) are converted to strings:
  let obj = { 0: 'test' }
  alert(obj[0]) // "test"
Enter fullscreen mode Exit fullscreen mode

Testing and Iterating Properties

  1. Property Existence:
    • Use "key" in obj to check if a key exists.
   let user = { age: undefined }
   alert('age' in user) // true
Enter fullscreen mode Exit fullscreen mode
  1. Iterating with for..in:
   let user = { name: 'John', age: 30 }
   for (let key in user) {
     alert(key) // Outputs: "name", "age"
     alert(user[key]) // Outputs: "John", 30
   }
Enter fullscreen mode Exit fullscreen mode

Property Order

  • Integer keys: Sorted in ascending order.
  • Non-integer keys: Retain their creation order.

Realistic Code Sample: A User Profile

let userProfile = {
  firstName: 'Jane',
  lastName: 'Smith',
  email: 'jane.smith@example.com',
  isVerified: true,
  address: {
    street: '123 Elm Street',
    city: 'Metropolis',
    postalCode: '12345',
  },
  interests: ['reading', 'hiking', 'coding'],

  // Method inside an object
  getFullName() {
    return `${this.firstName} ${this.lastName}`
  },

  // Dynamically updating properties
  updateEmail(newEmail) {
    this.email = newEmail
    console.log(`Email updated to ${this.email}`)
  },
}

// Accessing properties
console.log(userProfile.getFullName()) // Output: Jane Smith

// Updating email using the method
userProfile.updateEmail('jane.doe@example.com') // Output: Email updated to jane.doe@example.com

// Accessing nested properties
console.log(userProfile.address.city) // Output: Metropolis

// Iterating over interests
console.log('User Interests:')
userProfile.interests.forEach((interest) => console.log(interest))
Enter fullscreen mode Exit fullscreen mode

Adding and Deleting Properties

Properties can be added or removed dynamically after an object is created.

// Adding a new property
userProfile.phoneNumber = '555-1234'
console.log(userProfile.phoneNumber) // Output: 555-1234

// Deleting a property
delete userProfile.isVerified
console.log(userProfile.isVerified) // Output: undefined
Enter fullscreen mode Exit fullscreen mode

Computed Properties

When creating objects, the property name can be dynamically computed using square brackets.

let key = 'favoriteColor'
let userPreferences = {
  [key]: 'blue',
  [key + 'Secondary']: 'green',
}

console.log(userPreferences.favoriteColor) // Output: blue
console.log(userPreferences.favoriteColorSecondary) // Output: green
Enter fullscreen mode Exit fullscreen mode

Iterating Over Object Properties

Using for...in, you can loop through all keys in an object.

for (let key in userProfile) {
  console.log(`${key}: ${userProfile[key]}`)
}
Enter fullscreen mode Exit fullscreen mode

Realistic Example: Product Inventory

Here’s how objects can be used in a practical scenario, such as managing a product inventory:

let inventory = {
  products: [
    {
      id: 1,
      name: 'Laptop',
      price: 1200,
      stock: 25,
    },
    {
      id: 2,
      name: 'Smartphone',
      price: 800,
      stock: 50,
    },
    {
      id: 3,
      name: 'Tablet',
      price: 400,
      stock: 30,
    },
  ],

  // Method to display all products
  listProducts() {
    console.log('Product Inventory:')
    this.products.forEach((product) => {
      console.log(
        `${product.name} - $${product.price} (Stock: ${product.stock})`
      )
    })
  },

  // Method to update stock
  updateStock(productId, quantity) {
    let product = this.products.find((p) => p.id === productId)
    if (product) {
      product.stock += quantity
      console.log(`${product.name} stock updated to ${product.stock}`)
    } else {
      console.log('Product not found!')
    }
  },
}

// List products
inventory.listProducts()

// Update stock
inventory.updateStock(2, -5) // Decrease stock for Smartphone
inventory.listProducts()
Enter fullscreen mode Exit fullscreen mode

Using in Operator

The in operator checks if a property exists in an object. It’s particularly useful when verifying optional or dynamically added properties.

if ('phoneNumber' in userProfile) {
  console.log('Phone number exists:', userProfile.phoneNumber)
} else {
  console.log('Phone number not available.')
}
Enter fullscreen mode Exit fullscreen mode

Summary

Objects are central to JavaScript, offering flexibility and functionality:

  • Keys can be strings or symbols.
  • Access properties using dot or bracket notation.
  • Use for..in to iterate over keys.
  • Understand integer vs. non-integer property ordering.

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay