Sign In
Sign In

Arrow Functions in JavaScript

Arrow Functions in JavaScript
Hostman Team
Technical writer
JavaScript
24.11.2023
Reading time: 7 min

With the release of the ES6 standard in 2015, programmers have gotten several new features and functions in JavaScript. The new standard added arrow functions, ways to declare let and const variables, promises, and many other fundamental changes to the language. Today, we will focus on arrow functions.

Arrow functions in JavaScript are a new method of declaring functional expressions that is much more compact and convenient than its predecessor. If you are familiar with lambda functions in Python, you will definitely find similarities between them.

In this article, we'll look at arrow functions and their syntax, give usage examples, and learn the ins and outs of using them in code.

-

Functions

Before we study arrow functions, we should revise the traditional way of declaring functions and function expressions. This chapter will help users to remember what functions and function expressions are and to apprehend how their declaration differs from the arrow functions.

A function is a set of commands written to accomplish a specific task when called. It can be called from any part of the code as many times as you like.

The syntax of a standard function declaration is as follows:

function function_name(set_of_parameters) {
 set_of_commands;

A function declaration is always read first, meaning it can be called before it is declared. This process is called hoisting.

An example of an ordinary function:

console.log(multiplication(2,5));

function multiplication (x, y) {
 return x * y;
}

84ddebe8 2aa5 4294 89d9 B83526459d29

A function definition expression is another method of declaring a function by assigning it to a variable or constant. It can then be passed as an argument to another function or used as a return value.

The syntax for declaring a function expression is as follows:

var variable_name = function function_name (parameters) {
 commands;
}

The function_name parameter is optional. In its absence, the function will be considered anonymous.

Unlike regular functions, a functional expression can only be called after it has been declared in the code.

An example of a functional expression:

const multiplication = function (x, y) {
 return x * y;
}

console.log(multiplication(2,5));

Image5

The basics of arrow functions

Arrow functions (arrow function expressions) are the same as function expressions but anonymous and have some syntax peculiarities. Let's take a closer look at those peculiarities.

  • Concise and clear syntax

The syntax of arrow functions in JavaScript is intuitive and concise. Its basic version is as follows:

(set_of_parameters) => {
 set_of_commands;
}

As we can see, the main difference between arrow functions and normal functions is the absence of the function keyword and the addition of => characters after the argument list in brackets.

For example:

const multiplication = (x, y) => x * y;
console.log(multiplication(2,5));

Here, we did not use curly braces because the function's body contains only one operation. Also, we did not specify an explicit return of the result, as it will happen automatically.

When we execute this code, the result is as follows.

3b12e0af Dfaa 4ab1 9e3b E3676ccf9771

  • The this keyword

Arrow functions operate only in the scope in which they are declared, and do not have their own functional execution context. This implies that entities such as this or argument are inherited exclusively from parent functions.

For a more detailed understanding, here is an example where we will use both a regular function and an arrow function:

function Animal() {
    this.group = 'Mammals',
    this.name = 'Elephant',
    this.Animal1 = function () {
        console.log('Operation of a normal function:')
        console.log(this.group);

        function exampleFunction1() {
            console.log(this.name);
        }
        exampleFunction1();
    }
    this.Animal2 = function () {
        console.log('Operation of an arrow function:')
        console.log(this.group);

        let exampleFunction2 = () => console.log(this.name);
        exampleFunction2();
    }
}

let x = new Animal();
x.Animal1();
let y = new Animal();
y.Animal2();

In this example, this.group is available both inside this.Animal1 and inside this.Animal2, since these are two methods of the same object. However, inside these methods, in the first case this.name returns an undefined value, and the output is empty since this function has its own context (in this case, window). In the second case, however, it references the parent scope and returns this.name = 'Elephant'

When we execute the code, we receive the following output:

Operation of a normal function:
Mammals

Operation of an arrow function:
Mammals
Elephant
  • Constructors

Arrow functions cannot be used as constructors, nor can they have their own properties and methods because they lack the prototype property the normal functions have. When calling them with the new operator, the system will generate an error.

93257324 Ae14 4f5d 8c01 Bb0e7ff4e63e

Also, since the arrow is followed by curly braces denoting a code block with commands, the user will not be able to create an object inside the function or return an object literal from it in the usual way. For example, the following code fragment will generate an error:

(firstName, lastName) => {firstName: firstName, lastName: lastName};

The system considers it the function's body; that's why an error occurs in this code fragment. To fix this, we need to enclose the object literal in parentheses:

(firstName, lastName) => ({firstName: firstName, lastName: lastName});

Examples of use

Arrow functions are acceptable anywhere in a program but are especially useful in callback functions that take other functions as parameters. In the following example, we use it as a callback for the map method:

const example_numbers = [1, 2, 3, 4, 5];
const doubling = example_numbers.map(number => number * 2);
console.log(doubling);

2816e5f6 82d2 409d 9404 51eed418103b

Like with curly braces, we can omit parentheses if only one parameter is specified, as in the example above.

Another example of arrow functions is using them in the reduce method. In the following example, we use an arrow function to add up all the elements of an array:

const example_numbers = [1, 2, 3, 4, 5];
const sum = example_numbers.reduce((total, number) => total + number, 0);
console.log(sum);

As a result, we get the following:

E4549098 9d51 4a29 B6ee 4b4a056347c2

When to avoid using arrow functions

There are cases where regular functions are preferable to arrow functions. 

Mostly, they are related to the this keyword behavior and its peculiarities, because of which you shouldn't use arrow functions in object methods.

Let’s look at this example:

let animal = {
    group: 'Amphibians',
    name: 'Lake frog',
    infoAnimal: () => {        
console.log('Animal group -',this.group);
console.log('Animal name -',this.name);
    },
}

animal.infoAnimal(); 

Here, we have the infoAnimal method, which outputs information about the object when we call it with the animal.infoAnimal(). In this case, its lexical environment is window. Hence, it has nothing to do with the group and name object properties. 

This is the result we get:

Animal group - undefined 
Animal name - undefined

Now let's rewrite the code using a normal function and look at the result:

let animal = {
    group: 'Amphibians',
    name: 'Lake frog',
    infoAnimal: function () {        
            console.log('Animal group -',this.group);
    console.log('Animal name -',this.name);
    },
}

animal.infoAnimal();

We can see that this method works successfully:

Animal group - Amphibians 
Animal name - Lake frog

In addition to object methods, you shouldn't use the arrow functions for functions with a dynamic context, because they bind the context statically. For example, this applies to working with event handlers or event listeners.

What to remember

  • Arrow functions (arrow function expressions) are the same as function expressions, but anonymous and with some syntax peculiarities.

  • Their basic syntax is as follows:

(set_parameters) => {
 set_commands;
}
  • When using the arrow functions, you can remove parentheses around a parameter if it is a single parameter. If the function implements only one operation, you can also use implicit return, which means deleting curly brackets and the return keyword.

  • Arrow functions work only in the scope in which they were declared, and do not have their own functional execution context. So, entities such as this or argument are inherited exclusively from parent functions.

  • When working with object methods, dynamic context or constructors, you should use regular functions, not arrow functions.

JavaScript
24.11.2023
Reading time: 7 min

Similar

JavaScript

How to Use JavaScript Array map()

Arrays play a crucial role in JavaScript programming. They let you store and manipulate collections of data with ease. One powerful method for working with arrays is the map() function. The map() method creates a new array by applying a given function to each element of the original array. Simply put, map() takes your array, processes each item through a function you provide, and returns a new array with the transformed items. It doesn't change the original array, which helps prevent unintended side effects in your code.  In this guide, we'll explore the map() function, how it works, and how you can use it in your JavaScript projects. Basic Syntax and Parameters of map() The map() function is a built-in method in JavaScript that you can use on arrays. It creates a new array by applying a function to each element of the original array. Below is the syntax: let newArray = originalArray.map(function(currentValue, index, array) { // return element to newArray }); Or, using arrow function syntax: let newArray = originalArray.map((currentValue, index, array) => { // return element to newArray }); Let's break down the parameters: currentValue: The current element being processed in the array. index (optional): The index of the current element. array (optional): The original array to which map() is being applied. However, you must provide a callback function that tells map() how to transform each element. This function runs once for every item in the array. Importantly, map() does not modify the original array; instead, it returns a new array with the transformed elements. For example, if you have an array of numbers and want to add 1 to each number, you can use map() like this: let numbers = [1, 2, 3, 4, 5]; let incrementedNumbers = numbers.map(number => number + 1); console.log(incrementedNumbers); Output: [ 2, 3, 4, 5, 6 ] In this example, the map() function takes each number in the numbers array, adds 1 to it, and returns a new array called incrementedNumbers. Using map() to Transform Array Elements The map() method is helpful when you need to transform each element in an array. It applies a function to every item and returns a new array with the transformed elements. Let's explore how you can use map() to manipulate array data. Let’s say you have an array of numbers, and want to double each number. Instead of writing a loop, you can achieve this with map() in a more concise way. let numbers = [1, 2, 3, 4, 5]; let doubled = numbers.map(number => number * 2); console.log(doubled); Output: [ 2, 4, 6, 8, 10 ] In this example, numbers.map(number => number * 2) takes each element in the numbers array, multiplies it by two, and stores the result in a new array called doubled. The original numbers array remains unchanged. You can also transform arrays of strings. Let's say you have an array of names and you want to convert them all to uppercase letters. let names = ['alice', 'bob', 'charlie']; let upperNames = names.map(name => name.toUpperCase()); console.log(upperNames); Output: [ 'ALICE', 'BOB', 'CHARLIE' ] Here, map() applies the toUpperCase() method to each string in the names array, resulting in a new array upperNames with all names in uppercase. Another practical use is when working with arrays of objects. For example, you might have an array of user objects and want to extract a specific property from each one. let users = [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 35 } ]; let userNames = users.map(user => user.name); console.log(userNames); Output: [ 'Alice', 'Bob', 'Charlie' ] In this case, map() extracts the name property from each user object and creates a new array userNames. Practical Examples of map() The map() function really shines when working with real-world data. Let's see some practical examples to see how map() can simplify your JavaScript code. Example 1: Converting Temperatures Let’s assume you have an array of temperatures in Celsius and want to convert them to Fahrenheit. You can use map() to apply the conversion formula to each element. let celsius = [0, 20, 30, 40]; let fahrenheit = celsius.map(temp => temp * 9/5 + 32); console.log(fahrenheit); Output: [ 32, 68, 86, 104 ] In this example, map() takes each temperature in the celsius array, converts it to Fahrenheit, and returns a new array called fahrenheit. Example 2: Extracting Usernames from Emails Imagine you have an array of email addresses and you want to extract the usernames. let emails = ['[email protected]', '[email protected]', '[email protected]'];let usernames = emails.map(email => email.split('@')[0]);console.log(usernames); Output: [ 'alice', 'bob', 'charlie' ] Here, map() processes each email address, splits it at the @ symbol, and extracts the username part. Example 3: Applying Discounts to Products If you have an array of product objects and need to apply a discount to each product's price, map() makes this task easy. let products = [ { name: 'Laptop', price: 1000 }, { name: 'Phone', price: 500 }, { name: 'Tablet', price: 750 } ]; let discountedProducts = products.map(product => { return { name: product.name, price: product.price * 0.9 // Apply a 10% discount }; }); console.log(discountedProducts); Output: [ { name: 'Laptop', price: 900 }, { name: 'Phone', price: 450 }, { name: 'Tablet', price: 675 } ] In this case, map() creates a new array discountedProducts with the discounted prices, leaving the original products array unchanged. Example 4: Formatting Dates If you have an array of date strings and want to format them into a more readable form. let dates = ['2023-01-01', '2023-02-14', '2023-12-25']; let formattedDates = dates.map(date => { let options = { year: 'numeric', month: 'long', day: 'numeric' }; return new Date(date).toLocaleDateString(undefined, options); }); console.log(formattedDates); Output: [ 'January 1, 2023', 'February 14, 2023', 'December 25, 2023' ] Here, map() converts each date string into a Date object and formats it using toLocaleDateString(). Example 5: Generating HTML Elements If you're working with the DOM, you can use map() to create an array of HTML elements. let fruits = ['apple', 'banana', 'cherry'];let fruitListItems = fruits.map(fruit => `<li>${fruit}</li>`);console.log(fruitListItems); Output: [ '<li>apple</li>', '<li>banana</li>', '<li>cherry</li>' ] You can then join these items and insert them into your HTML. let fruits = ['apple', 'banana', 'cherry']; let fruitListItems = fruits.map(fruit => `<li>${fruit}</li>`); let fruitList = `<ul>${fruitListItems.join('')}</ul>`; console.log(fruitList); Output: <ul><li>apple</li><li>banana</li><li>cherry</li></ul> This demonstrates how map() can help generate dynamic content. Chaining map() with Other Array Methods The map() function becomes even more powerful when you chain it with other array methods like filter(), reduce(), or sort(). You can perform complex data transformations easily when you combine these methods. Filtering and Mapping Let’s say you have an array of numbers and you want to double only the even numbers. let numbers = [1, 2, 3, 4, 5, 6]; let doubledEvens = numbers .filter(number => number % 2 === 0) .map(number => number * 2); console.log(doubledEvens); Output: [ 4, 8, 12 ] In this example, filter() first selects the even numbers from the numbers array. Then, map() doubles each of those numbers. Mapping and Reducing Imagine you have an array of objects representing products and want to calculate the total price of all products after applying a discount. let products = [ { name: 'Laptop', price: 1000 }, { name: 'Phone', price: 500 }, { name: 'Tablet', price: 750 } ]; let totalDiscountedPrice = products .map(product => product.price * 0.9) // Apply a 10% discount .reduce((total, price) => total + price, 0); console.log(totalDiscountedPrice); Output: 2025 Here, map() creates a new array with the discounted prices. Then, reduce() sums up the prices to get the total. Sorting Mapped Values Imagine you have an array of strings and want to convert them to uppercase and then sort them alphabetically. let fruits = ['banana', 'apple', 'cherry']; let sortedFruits = fruits .map(fruit => fruit.toUpperCase()) .sort(); console.log(sortedFruits); Output: [ 'APPLE', 'BANANA', 'CHERRY' ] In this case, map() transforms each fruit name to uppercase, and sort() arranges them alphabetically. Complex Data Transformation Let’s assume you have an array of user objects, and you want to get a sorted list of active users' usernames. let users = [ { username: 'alice', active: true }, { username: 'bob', active: false }, { username: 'charlie', active: true } ]; let activeUsernames = users .filter(user => user.active) .map(user => user.username) .sort(); console.log(activeUsernames); Output: [ 'alice', 'charlie' ] Here, you filter out inactive users, extract their usernames with map(), and sort the usernames alphabetically. Handling Edge Cases with map() While the map() function is powerful, handling edge cases is important to prevent unexpected behavior. Let's explore some common scenarios and how to manage them. Dealing with Empty Arrays If you apply map() to an empty array, it simply returns another empty array. There's no need to add extra checks for this case. let emptyArray = [];let result = emptyArray.map(item => item * 2);console.log(result); Output: [ ] Handling Undefined or Null Elements When your array contains undefined or null values, map() will pass them to your callback function. You need to ensure your function can handle these values without throwing errors. let values = [1, null, 3, undefined, 5]; let processedValues = values.map(value => { if (value === null || value === undefined) { return 0; // Assign a default value } return value * 2; }); console.log(processedValues); Output: [ 2, 0, 6, 0, 10 ] In this example, we check for null or undefined and assign a default value of 0 before performing the calculation. Avoiding Holes in Arrays Arrays can have holes if elements are deleted or uninitialized. The map() function skips these holes, which might lead to unexpected results. let sparseArray = [1, , 3, , 5]; // Note the missing elementslet doubled = sparseArray.map(number => number * 2);console.log(doubled); Output: [ 2, <1 empty item>, 6, <1 empty item>, 10 ] To handle this, you can use the Array.from() method to create an array without holes before mapping. let sparseArray = [1, , 3, , 5]; // Note the missing elements let doubled = sparseArray.map(number => number * 2); let denseArray = Array.from(sparseArray); let doubledDense = denseArray.map(number => number * 2); console.log(doubledDense); Output: [ 2, NaN, 6, NaN, 10 ] Now, the missing elements are converted to undefined, and you can handle them accordingly. Managing Asynchronous Operations The map() function doesn't support asynchronous operations natively. To perform asynchronous tasks, consider using Promise.all() with map(). let urls = ['url1', 'url2', 'url3']; let fetchPromises = urls.map(url => fetch(url)); Promise.all(fetchPromises) .then(responses => { // Handle responses }) .catch(error => { // Handle errors }); Here, map() creates an array of promises, and Promise.all() waits for all of them to resolve. Using map() with Callback Functions The map() method relies on a callback function to process each element in an array. Let's explore different ways to use map() with callback functions. Using Named Functions You can pass a named function to map() for better readability, especially when the transformation logic is complex. function doubleNumber(number) { return number * 2; } let numbers = [1, 2, 3, 4, 5]; let doubledNumbers = numbers.map(doubleNumber); console.log(doubledNumbers); Output: [ 2, 4, 6, 8, 10 ] In this example, the doubleNumber function is passed as the callback to map(). Each element in the numbers array is doubled, resulting in a new array doubledNumbers. Using Anonymous Functions Anonymous functions can be used directly within map() for simple transformations. let numbers = [1, 2, 3, 4, 5]; let squaredNumbers = numbers.map(function(number) { return number * number; }); console.log(squaredNumbers); Output: [ 1, 4, 9, 16, 25 ] Here, an anonymous function computes the square of each number in the array. Using Arrow Functions Arrow functions offer a concise syntax and are commonly used with map(). let numbers = [1, 2, 3, 4, 5]; let tripledNumbers = numbers.map(number => number * 3); console.log(tripledNumbers); Output: [ 3, 6, 9, 12, 15 ] The arrow function number => number * 3 triples each number in the array. Using Callback Functions with Multiple Parameters The callback function can accept additional parameters like index and array, providing more context during the mapping process. let numbers = [10, 20, 30, 40, 50]; let adjustedNumbers = numbers.map((number, index) => number - index * 2); console.log(adjustedNumbers); Output: [ 10, 18, 26, 34, 42 ] In this example, each number is adjusted based on its index in the array. Using thisArg with map() The map() method accepts an optional second argument called thisArg, which sets the value of this inside the callback function. let multiplier = { factor: 2 }; let numbers = [1, 2, 3]; let scaledNumbers = numbers.map(function(number) { return number * this.factor; }, multiplier); console.log(scaledNumbers); Output: [ 2, 4, 6 ] By passing multiplier as the thisArg, the callback function can access this.factor to scale each number. Performance Considerations for map() When using map(), it's important to consider performance. Since map() creates a new array, it consumes additional memory. Therefore, with very large arrays, this extra memory usage can affect your application's efficiency. Furthermore, while map() offers clean and readable code, traditional loops like for or while loops might execute faster in performance-critical situations. If speed is crucial, consider using a loop instead of map(). Moreover, keep your callback functions simple. Complex operations inside the map() callback can slow down processing. To maintain optimal performance, aim for straightforward transformations. Finally, use map() only when you need the new array it returns. If you're performing actions without needing the resulting array, methods like .forEach() are more appropriate. This avoids unnecessary memory allocation and enhances performance. Conclusion The JavaScript map() function is a powerful tool for array manipulation. By applying a function to each element, it creates a new array with transformed values, making tasks like data conversion and extraction straightforward. Understanding how to use map() effectively allows you to write cleaner, more efficient code.
16 October 2024 · 12 min to read
JavaScript

How to Use the Date Object in JavaScript

JavaScript provides a built-in Date object that simplifies working with dates and times. This tutorial will guide developers through the essential aspects of the Date object, including its creation, retrieval of date and time information, formatting, manipulation, and handling of time zones. Introduction to JavaScript Date Object The Date object in JavaScript represents datetime values, enabling developers to manage temporal data with ease. It is essential for tasks such as scheduling, time tracking, and logging. The Date object helps: Represent specific date and time values, such as "2022-07-25T14:30:00.000Z". Perform operations like retrieving, formatting, and manipulating dates and times. Simplify date and time calculations across different time zones. Understanding the basics of the Date object will help in managing time-sensitive data efficiently in web applications. Creating a Date Object Creating a Date object in JavaScript is straightforward. Here are the two common ways to achieve it:  Using the current time Using a timestamp Creating a Date Object for the Current Time The simplest way to create a Date object is by instantiating the current date and time: const currentDate = new Date();console.log(currentDate); This creates an object representing the current date and time in the user's local timezone. Creating a Date Object Using a Timestamp You can also create a Date object from a specific timestamp (milliseconds since January 1, 1970): const timestamp = 1643723400000; const dateObject = new Date(timestamp); console.log(dateObject); This is useful for manipulating dates stored in timestamp format. Now that we know how to create a date object, let’s see how to retrieve date and time information. Retrieving JS Date and Time Information The Date object provides methods for extracting various components of a date, such as a year, month, and hour. Key methods include getDate(): Returns the day of the month. getFullYear(): Returns the four-digit year. getMonth(): Returns the month (0-11, where 0 represents January). getHours(): Returns the hour (0-23). getMinutes(): Returns the minutes (0-59). getSeconds(): Returns the seconds (0-59). For example, to retrieve the current date and format it as MM/DD/YYYY HH:MM:ss: function formatDate(dateObject) { const year = dateObject.getFullYear(); const month = dateObject.getMonth() + 1; // Months are zero-indexed const day = dateObject.getDate(); const hours = dateObject.getHours(); const minutes = dateObject.getMinutes(); const seconds = dateObject.getSeconds(); return `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`; } console.log(formatDate(new Date())); Here is the result when executing the function.  There are however interesting methods we can use to format datetime into readable formats.  Formatting Date and Time JavaScript provides methods to format datetime values into human-readable strings. This allows developers to convert a Date object to a string or vice versa. Formatting a Date as a String To output a Date object as a human-readable string, use methods like toDateString() and toTimeString(): const currentDate = new Date(); const dateString = currentDate.toDateString(); console.log(dateString); const timeString = currentDate.toTimeString(); console.log(timeString); Here is the output: Converting Strings to Date Objects Developers can also convert readable strings into Date objects using the Date constructor: const dateFromString = new Date("October 10, 2024");console.log(dateFromString); However, it’s better to use recommended formats.  Recommended Formats To avoid errors when working with date strings, it is advisable to use reliable formats: ISO 8601 Format (Recommended): The safest and most reliable format is the ISO 8601 date format: YYYY-MM-DDTHH:mm:ss.sssZ. If only the date part is provided, it assumes the time as midnight 00:00:00. const date = new Date("2024-10-10T14:48:00Z");console.log(date); RFC2822 Format: Another accepted format is the RFC2822 format commonly used in email headers: Day, DD Mon YYYY HH:mm:ss GMT. const date = new Date("Wed, 10 Oct 2024 14:48:00 GMT");console.log(date); We now know how to format datetime values using the Date object. Let’s see how to manipulate date values for simple scheduling and calculations. Manipulating Date Values Date manipulation is essential for tasks like scheduling and calculating deadlines. JavaScript provides setter methods for modifying specific components of a Date object. Modifying Date Components Developers can modify specific components of a Date object using setter methods. Note that months are zero-indexed: let date = new Date(); date.setFullYear(2025); date.setMonth(5); // Set month to June date.setDate(15); // Set day to 15th date.setHours(10); // Set hour to 10 AM date.setMinutes(30); // Set minutes to 30 date.setSeconds(45); // Set seconds to 45 console.log(date); Adding or Subtracting Days Developers can easily add or subtract days using setDate(): let date = new Date(); date.setDate(date.getDate() + 5); // Add 5 days console.log(date); Date arithmetic can be accomplished using timestamps (milliseconds since January 1, 1970): let now = new Date(); let oneDayInMs = 24 * 60 * 60 * 1000; let tomorrow = new Date(now.getTime() + oneDayInMs); console.log(tomorrow); Comparing Date Objects Date objects can be compared using their timestamps: let date1 = new Date('2024-10-10'); let date2 = new Date('2024-12-25'); console.log(date1 > date2); // false (October 10 is earlier than December 25) console.log(date1 < date2); // true console.log(date1.getTime() === date2.getTime()); // false Now that we now how to manipulate dates values for calculation, let’s see how we can handle dates with time zones. Working with Time Zones The Date object is timezone-agnostic, meaning it doesn't have a built-in concept of time zones. However, JavaScript’s Date object handles dates in local time (system time zone) and UTC. When creating Date objects, it is essential to be aware of time zone conversions, especially when performing operations across different regions. Local Time vs. UTC JavaScript can work with localtime and UTC. Local time allows you to represent the time by the Date object when created without any specific time zone information, reflecting the local time of the environment in which JavaScript is executed. For example, creating a Date object in Paris will reflect the central European time zone. UTC is the time standard not affected by time zones or DayLight Saving Time (DST). Using Coordinated Universal Time (UTC) ensures consistency and avoids ambiguity when working with dates and times across different time zones, simplifying time calculations, logging, and user experience management in applications that serve users in multiple regions. Creating Date Objects in UTC To create a Date object in UTC, use the ISO 8601 format: const utcDate = new Date("2024-10-10T14:30:00Z");console.log(utcDate); Converting Local Time to UTC To retrieve UTC date components, use getUTCDate(), getUTCMonth(), etc.: const localDate = new Date();console.log(localDate.getUTCDate(), localDate.getUTCMonth() + 1, localDate.getUTCFullYear()); Converting UTC to Local Time Similarly, to convert a UTC date to local time, you can use the local equivalent methods: const utcDate = new Date("2024-10-10T14:30:00Z"); // UTC date const localDay = utcDate.getDate(); const localMonth = utcDate.getMonth() + 1; // Months are zero-indexed const localYear = utcDate.getFullYear(); console.log(`Local Date: ${localMonth}/${localDay}/${localYear}`); Being mindful of time zones when working with dates in JavaScript is essential for ensuring accurate datetime representation, especially in applications that require coordination across different regions. Let’s learn more about common Date Object methods. Common Date Object Methods JavaScript provides several static and instance methods that simplify working with dates. Here are some key methods: Date.now(): Returns the current timestamp in milliseconds since January 1, 1970. Date.parse(): Parses a date string and returns the number of milliseconds since the Unix Epoch (January 1, 1970). If the string cannot be parsed, it returns NaN. Date.UTC(): Creates a Date object from UTC values. Date.toString(): Returns a string representation of the Date object in a readable format. valueOf(): Returns the primitive value of the Date object. These methods provide essential functionality for working with dates in JavaScript, enabling developers to efficiently manage and manipulate date values in their applications.  Conclusion The JavaScript Date object is an essential tool for managing datetime in web development. From creating dates to formatting and performing date arithmetic, mastering this object will enable developers to handle time-sensitive data efficiently, regardless of time zone or locale. By using built-in methods and libraries like Moment.js, date-fns, or Day.js, developers can ensure their applications deliver a smooth user experience when working with dates.
15 October 2024 · 8 min to read
JavaScript

How to Parse JSON in JavaScript

Let’s start this article with a simple, approachable, and reader-friendly way to grasp the concept. To begin, let’s discuss what JSON is. A basic JavaScript function called JSON parsing enables programmers to transform JSON strings into functional JavaScript objects. This is made easier with the integrated in JS parsing JSON function. Take the JSON string {"name": "John", "age": 30}, for instance. This string is converted into a JavaScript object with characteristics like name and age using JSON.parse(). This kind of power is especially important when working with external data sources, like APIs. For example, the response.json() method is used to parse the JSON content when retrieving JSON data from a server using the Fetch API. The program can then easily use the parsed data to provide dynamic and engaging user experiences.  JSON (JavaScript Object Notation) The term JSON, JavaScript Object Notation, is a data interchange format particularly used to interchange data between several platforms. JSON is among the best formats that play a significant role in communicating and interchanging data. JS JSON parser is easy for humans to read, write, and understand in a simplified way, and for machines, it is likely easier to generate and parse data. Furthermore, it is an independent programming language that follows a programming approach that is compatible with general programming ideas. As a result, JSON parser in JS is used in JavaScript for storing and conveying data between the server and the client. JSON Syntax Rules Data is required to be in key-value pairs. Data is separated from each other using commas. Curly brackets hold objects. Square brackets hold arrays. Example of JSON For example, consider an object named employee that contains three employee records. This object can be represented in JSON format as follows: { "𝚎𝚖𝚙𝚕𝚘𝚢𝚎𝚎𝚜":[ {"𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝙼𝚒𝚕𝚕𝚒𝚎", "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝙲𝚛𝚒𝚜𝚝𝚒𝚗𝚊"}, {"𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝚆𝚊𝚝𝚜𝚘𝚗", "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝚃𝚑𝚘𝚖𝚊𝚜"}, {"𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝙹𝚊𝚜𝚖𝚒𝚗𝚊", "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝙽𝚒𝚌𝚔"} ] } Syntactically, the code used to create JavaScript objects is identical to that of the JSON format. Therefore, this closeness makes it easy for a JavaScript program to transform JSON data into native JavaScript objects. JSON Data (Name and Value) JSON data is expressed as name/value pairs, much like the properties of JavaScript objects. A field name (in double quotes), a colon (:), and a value make up a name/value pair. For instance: "𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝚂𝚒𝚛𝚕𝚒𝚎" Note: Keep in mind that JSON names need double quotes on the other hand JavaScript names do not. JSON Objects Curly brackets are used to write JSON objects.  Objects can include many name/value pairs, just like in JavaScript. For instance: {"𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝚂𝚒𝚛𝚕𝚒𝚎", "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝙼𝚒𝚌𝚔𝚘𝚗"} Working with JSON Changing a JSON Text to a JavaScript Object Reading data from a web server and displaying it on a web page is a popular use for parsing json in js. To keep things simple, let's say we have a string as input. Make a JavaScript string with JSON syntax first: 𝚟𝚊𝚛 𝚝𝚎𝚡𝚝 = '{ "𝚎𝚖𝚙𝚕𝚘𝚢𝚎𝚎𝚜" : [' + '{ "𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝙹𝚘𝚗𝚊𝚜" , "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝙰𝚕𝚊𝚗" },' + '{ "𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝚔𝚑𝚊𝚒" , "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝚋𝚛𝚘𝚘𝚔" },' + '{ "𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎":"𝚓𝚎𝚜𝚜𝚒𝚌𝚊" , "𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎":"𝚜𝚖𝚒𝚝𝚑" } ]}'; After that, use the JavaScript built-in function JSON.parse() to translate the string into a JavaScript object just as the example given below. var obj = JSON.parse(text); Conclusively, now you can use the new JavaScript object. Example: <𝚙 𝚒𝚍="𝚍𝚎𝚖𝚘"></𝚙><𝚜𝚌𝚛𝚒𝚙𝚝> 𝚍𝚘𝚌𝚞𝚖𝚎𝚗𝚝.𝚐𝚎𝚝𝙴𝚕𝚎𝚖𝚎𝚗𝚝𝙱𝚢𝙸𝚍("𝚍𝚎𝚖𝚘").𝚒𝚗𝚗𝚎𝚛𝙷𝚃𝙼𝙻 = 𝚘𝚋𝚓.𝚎𝚖𝚙𝚕𝚘𝚢𝚎𝚎𝚜[𝟷].𝚏𝚒𝚛𝚜𝚝𝙽𝚊𝚖𝚎 + " " + 𝚘𝚋𝚓.𝚎𝚖𝚙𝚕𝚘𝚢𝚎𝚎𝚜[𝟷].𝚕𝚊𝚜𝚝𝙽𝚊𝚖𝚎; </𝚜𝚌𝚛𝚒𝚙𝚝> Let's now explore the several JavaScript ways for parsing JSON data. JSON.parse() JavaScript has a built-in function called JSON.parse() to turn a JSON string into a JavaScript object. The syntax is straightforward. Example: 𝚌𝚘𝚗𝚜𝚝 𝚓𝚜𝚘𝚗𝚂𝚝𝚛𝚒𝚗𝚐 = '{"𝚗𝚊𝚖𝚎": "𝙹𝚘𝚑𝚗", "𝚊𝚐𝚎": 𝟹0}'; 𝚌𝚘𝚗𝚜𝚝 𝚓𝚜𝚘𝚗𝙾𝚋𝚓𝚎𝚌𝚝 = 𝙹𝚂𝙾𝙽.𝚙𝚊𝚛𝚜𝚎(𝚓𝚜𝚘𝚗𝚂𝚝𝚛𝚒𝚗𝚐); 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕(𝚓𝚜𝚘𝚗𝙾𝚋𝚓𝚎𝚌𝚝); // 𝙾𝚞𝚝𝚙𝚞𝚝: { 𝚗𝚊𝚖𝚎: '𝙹𝚘𝚑𝚗', 𝚊𝚐𝚎: 𝟹0 } Parsing JSON from a File External files are frequently used to store JSON data. In JavaScript, you may use asynchronous methods like fetch() or frameworks like Axios to get and parse JSON data from a file. Here's an example with fetch(): 𝚏𝚎𝚝𝚌𝚑('𝚍𝚊𝚝𝚊.𝚓𝚜𝚘𝚗') .𝚝𝚑𝚎𝚗(𝚛𝚎𝚜𝚙𝚘𝚗𝚜𝚎 => 𝚛𝚎𝚜𝚙𝚘𝚗𝚜𝚎.𝚓𝚜𝚘𝚗()) .𝚝𝚑𝚎𝚗(𝚍𝚊𝚝𝚊 => 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕𝚘𝚐(𝚍𝚊𝚝𝚊)) .𝚌𝚊𝚝𝚌𝚑(𝚎𝚛𝚛𝚘𝚛 => 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚎𝚛𝚛𝚘𝚛('𝙴𝚛𝚛𝚘𝚛 𝚏𝚎𝚝𝚌𝚑𝚒𝚗𝚐 𝙹𝚂𝙾𝙽:', 𝚎𝚛𝚛𝚘𝚛)); Handling JSON Arrays JSON arrays are defined as comma-separated values surrounded by square brackets []. You can parse JSON arrays in the same way that you can parse objects using JSON.parse(). Example: 𝚌𝚘𝚗𝚜𝚝 𝚓𝚜𝚘𝚗𝙰𝚛𝚛𝚊𝚢𝚂𝚝𝚛𝚒𝚗𝚐 = '[{"𝚗𝚊𝚖𝚎": "𝙹𝚘𝚑𝚗", "𝚊𝚐𝚎": 𝟹0}, {"𝚗𝚊𝚖𝚎": "𝙰𝚕𝚒𝚌𝚎", "𝚊𝚐𝚎": 𝟸𝟻}]'; 𝚌𝚘𝚗𝚜𝚝 𝚓𝚜𝚘𝚗𝙰𝚛𝚛𝚊𝚢 = 𝙹𝚂𝙾𝙽.𝚙𝚊𝚛𝚜𝚎(𝚓𝚜𝚘𝚗𝙰𝚛𝚛𝚊𝚢𝚂𝚝𝚛𝚒𝚗𝚐); 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕(𝚓𝚜𝚘𝚗𝙰𝚛𝚛𝚊𝚢); // 𝙾𝚞𝚝𝚙𝚞𝚝: [ { 𝚗𝚊𝚖𝚎: '𝙹𝚘𝚑𝚗', 𝚊𝚐𝚎: 𝟹0 }, { 𝚗𝚊𝚖𝚎: '𝙰𝚕𝚒𝚌𝚎', 𝚊𝚐𝚎: 𝟸𝟻 } ] Error Handling When processing JSON data, it is critical to handle mistakes graciously. If the supplied string contains invalid JSON, the JSON.parse() function returns a SyntaxError. You may use try-catch blocks to deal with parsing errors: Example: 𝚌𝚘𝚗𝚜𝚝 𝚒𝚗𝚟𝚊𝚕𝚒𝚍𝙹𝚜𝚘𝚗𝚂𝚝𝚛𝚒𝚗𝚐 = '{𝚗𝚊𝚖𝚎: "𝙹𝚘𝚑𝚗", 𝚊𝚐𝚎: 𝟹0}'; 𝚝𝚛𝚢 { 𝚌𝚘𝚗𝚜𝚝 𝚙𝚊𝚛𝚜𝚎𝚍𝙳𝚊𝚝𝚊 = 𝙹𝚂𝙾𝙽.𝚙𝚊𝚛𝚜𝚎(𝚒𝚗𝚟𝚊𝚕𝚒𝚍𝙹𝚜𝚘𝚗𝚂𝚝𝚛𝚒𝚗𝚐); 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕𝚘𝚐(𝚙𝚊𝚛𝚜𝚎𝚍𝙳𝚊𝚝𝚊); } 𝚌𝚊𝚝𝚌𝚑 (𝚎𝚛𝚛𝚘𝚛) { 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚎𝚛𝚛𝚘𝚛('𝙴𝚛𝚛𝚘𝚛 𝚙𝚊𝚛𝚜𝚒𝚗𝚐 𝙹𝚂𝙾𝙽:', 𝚎𝚛𝚛𝚘𝚛); } Reviver Function The JSON.parse() method takes an optional reviver function as its second argument. This method lets you change how the JSON parsing process works by changing the processed value before it is returned. Example: 𝚌𝚘𝚗𝚜𝚝 𝚓𝚜𝚘𝚗𝚂𝚝𝚛𝚒𝚗𝚐𝚆𝚒𝚝𝚑𝙳𝚊𝚝𝚎𝚜 = '{"𝚍𝚊𝚝𝚎": "𝟸0𝟸𝟺-0𝟸-𝟸𝟹𝚃𝟷𝟸:00:00.000𝚉"}'; 𝚌𝚘𝚗𝚜𝚝 𝚓𝚜𝚘𝚗𝙾𝚋𝚓𝚎𝚌𝚝𝚆𝚒𝚝𝚑𝙳𝚊𝚝𝚎𝚜 = 𝙹𝚂𝙾𝙽.𝚙𝚊𝚛𝚜𝚎(𝚓𝚜𝚘𝚗𝚂𝚝𝚛𝚒𝚗𝚐𝚆𝚒𝚝𝚑𝙳𝚊𝚝𝚎𝚜, (𝚔𝚎𝚢, 𝚟𝚊𝚕𝚞𝚎) => { 𝚒𝚏 (𝚔𝚎𝚢 === '𝚍𝚊𝚝𝚎') { 𝚛𝚎𝚝𝚞𝚛𝚗 𝚗𝚎𝚠 𝙳𝚊𝚝𝚎(𝚟𝚊𝚕𝚞𝚎); } 𝚛𝚎𝚝𝚞𝚛𝚗 𝚟𝚊𝚕𝚞𝚎; }); 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕𝚘𝚐(𝚓𝚜𝚘𝚗𝙾𝚋𝚓𝚎𝚌𝚝𝚆𝚒𝚝𝚑𝙳𝚊𝚝𝚎𝚜.𝚍𝚊𝚝𝚎 𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎𝚘𝚏 𝙳𝚊𝚝𝚎); // 𝙾𝚞𝚝𝚙𝚞𝚝: 𝚝𝚛𝚞𝚎 Fetch with JSON parsing Retrieves data from an external source (such as an API) and automatically parses it into JSON. Example: 𝚏𝚎𝚝𝚌𝚑('𝚑𝚝𝚝𝚙𝚜://𝚊𝚙𝚒.𝚎𝚡𝚊𝚖𝚙𝚕𝚎.𝚌𝚘𝚖/𝚍𝚊𝚝𝚊') .𝚝𝚑𝚎𝚗(𝚛𝚎𝚜𝚙𝚘𝚗𝚜𝚎 => 𝚛𝚎𝚜𝚙𝚘𝚗𝚜𝚎.𝚓𝚜𝚘𝚗()) .𝚝𝚑𝚎𝚗(𝚍𝚊𝚝𝚊 => 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚕𝚘𝚐(𝚍𝚊𝚝𝚊.𝚗𝚊𝚖𝚎)) // 𝙰𝚜𝚜𝚞𝚖𝚒𝚗𝚐 𝚝𝚑𝚎 𝙰𝙿𝙸 𝚛𝚎𝚝𝚞𝚛𝚗𝚜 𝙹𝚂𝙾𝙽 𝚠𝚒𝚝𝚑 𝚊 "𝚗𝚊𝚖𝚎" 𝚙𝚛𝚘𝚙𝚎𝚛𝚝𝚢 .𝚌𝚊𝚝𝚌𝚑(𝚎𝚛𝚛𝚘𝚛 => 𝚌𝚘𝚗𝚜𝚘𝚕𝚎.𝚎𝚛𝚛𝚘𝚛(𝚎𝚛𝚛𝚘𝚛));  Cautions to Parsing JSON in JavaScript  JSON parsing is an essential ability for web developers. Learn how to use JSON.parse() and JSON.stringify() for fundamental functionality. As your demands change, you can explore more complex approaches. Prioritize data security and validation. Conclusion In a nutshell, one of the most important aspects of web development is parsing JSON in JavaScript, which allows JSON strings to be converted into JavaScript objects for efficient data handling. This procedure is made simpler by the integrated JSON.parse() function, which enables developers to easily integrate and use external data—especially when utilizing APIs. The foundation for developing dynamic and interactive user interfaces is provided by JavaScript, a flexible and popular computer language.  Furthermore, json parsing js is an essential component of contemporary web development because of its interoperability with both HTML and CSS and a thriving ecosystem of tools and frameworks. JavaScript has a significant impact on how online applications run and how users interact with them, whether it is through performance optimization, data gathering from other sources, or best practices implementation. 
22 March 2024 · 7 min to read

Do you have questions,
comments, or concerns?

Our professionals are available to assist you at any moment,
whether you need help or are just unsure of where to start.
Email us
Hostman's Support