What are the data types in JavaScript?

JavaScript has eight data types that can be divided into two main categories: primitive types and reference types (objects). Understanding these data types is fundamental to working effectively with JavaScript.

Primitive Data Types

JavaScript has seven primitive data types:

1. String

Represents textual data enclosed in single quotes, double quotes, or backticks (template literals).

const name = "Rahul";
const greeting = 'Hello';
const message = `${greeting}, ${name}!`; // Template literal (ES6)

// String methods
console.log(name.length);          // 5
console.log(name.toUpperCase());   // "RAHUL"
console.log(name.charAt(0));       // "R"
console.log(name.indexOf("h"));    // 2

2. Number

Represents both integer and floating-point numbers.

const integer = 42;
const float = 3.14;
const negative = -10;
const exponent = 2.5e6;      // 2,500,000
const binary = 0b1010;       // 10 in decimal
const octal = 0o744;         // 484 in decimal
const hex = 0xFF;            // 255 in decimal

// Special numeric values
const infinity = Infinity;
const negInfinity = -Infinity;
const notANumber = NaN;      // Result of invalid calculations

// Number methods
console.log(Number.isInteger(42));      // true
console.log(Number.isNaN(NaN));         // true
console.log((3.14159).toFixed(2));      // "3.14"

3. BigInt

Represents integers with arbitrary precision (introduced in ES2020).

const bigNumber = 9007199254740991n;    // n suffix creates a BigInt
const anotherBig = BigInt("9007199254740991");

// BigInt operations
console.log(bigNumber + 1n);            // 9007199254740992n
console.log(bigNumber * 2n);            // 18014398509481982n

// Cannot mix with Number type without explicit conversion
// console.log(bigNumber + 1);          // TypeError
console.log(Number(bigNumber) + 1);     // 9007199254740992

4. Boolean

Represents a logical entity with two values: true and false.

const isActive = true;
const isComplete = false;

// Truthy and falsy values
console.log(Boolean(0));          // false
console.log(Boolean(""));         // false
console.log(Boolean(null));       // false
console.log(Boolean(undefined));  // false
console.log(Boolean(NaN));        // false
console.log(Boolean(1));          // true
console.log(Boolean("hello"));    // true
console.log(Boolean({}));         // true
console.log(Boolean([]));         // true

5. Undefined

Represents a variable that has been declared but not assigned a value.

let variable;
console.log(variable);            // undefined
console.log(typeof variable);     // "undefined"

// Function parameters that aren't provided are undefined
function test(param) {
  console.log(param);             // undefined if not provided
}
test();

6. Null

Represents the intentional absence of any object value.

const empty = null;
console.log(empty);               // null
console.log(typeof null);         // "object" (this is a historical bug in JavaScript)

// Checking for null
console.log(empty === null);      // true

7. Symbol

Represents a unique and immutable value, often used as object property keys (introduced in ES6).

const id = Symbol("id");
const anotherId = Symbol("id");

console.log(id === anotherId);    // false, each Symbol is unique

// Using Symbols as object keys
const user = {
  name: "Priya",
  [id]: 12345                     // Symbol as a property key
};

console.log(user[id]);            // 12345
console.log(Object.keys(user));   // ["name"], Symbols are not enumerable

Reference Data Type: Object

All non-primitive types in JavaScript are objects:

8. Object

Represents a collection of key-value pairs and more complex entities.

// Object literal
const person = {
  firstName: "Rahul",
  lastName: "Sharma",
  age: 28,
  greet() {
    return `Hello, I'm ${this.firstName}`;
  }
};

console.log(person.firstName);    // "Rahul"
console.log(person["lastName"]);  // "Sharma"
console.log(person.greet());      // "Hello, I'm Rahul"

Common Object Sub-types

Arrays

Arrays are objects used for storing ordered collections.

const fruits = ["Apple", "Banana", "Cherry"];

console.log(fruits[0]);           // "Apple"
console.log(fruits.length);       // 3

// Array methods
fruits.push("Date");              // Add to end
fruits.pop();                     // Remove from end
fruits.unshift("Apricot");        // Add to beginning
fruits.shift();                   // Remove from beginning
fruits.splice(1, 1, "Blueberry"); // Replace elements

Functions

Functions in JavaScript are first-class objects.

// Function declaration
function add(a, b) {
  return a + b;
}

// Function expression
const subtract = function(a, b) {
  return a - b;
};

// Arrow function (ES6)
const multiply = (a, b) => a * b;

console.log(add(5, 3));           // 8
console.log(typeof add);          // "function"

Date

Object for working with dates and times.

const now = new Date();
const specific = new Date("2023-01-15T12:30:00");

console.log(now.toISOString());
console.log(specific.getFullYear());     // 2023
console.log(specific.getMonth());        // 0 (January is 0)

RegExp

Object for pattern matching with regular expressions.

const pattern = /^\d{3}-\d{2}-\d{4}$/;
const ssn = "123-45-6789";

console.log(pattern.test(ssn));          // true

Map

Object for storing key-value pairs with any type of keys (ES6).

const userRoles = new Map();
userRoles.set("Rahul", "Admin");
userRoles.set("Priya", "Editor");

console.log(userRoles.get("Rahul"));     // "Admin"
console.log(userRoles.has("Priya"));     // true
console.log(userRoles.size);             // 2

Set

Object for storing unique values of any type (ES6).

const uniqueNumbers = new Set([1, 2, 3, 3, 4, 4, 5]);

console.log(uniqueNumbers.size);         // 5 (duplicates removed)
console.log(uniqueNumbers.has(3));       // true

Type Checking in JavaScript

Using typeof Operator

console.log(typeof "Hello");             // "string"
console.log(typeof 42);                  // "number"
console.log(typeof true);                // "boolean"
console.log(typeof undefined);           // "undefined"
console.log(typeof null);                // "object" (historical bug)
console.log(typeof {});                  // "object"
console.log(typeof []);                  // "object" (arrays are objects)
console.log(typeof function(){});        // "function"
console.log(typeof Symbol());            // "symbol"
console.log(typeof 42n);                 // "bigint"

More Precise Type Checking

// For arrays
console.log(Array.isArray([]));          // true
console.log(Array.isArray({}));          // false

// For null
console.log(value === null);             // true if value is null

// For NaN
console.log(Number.isNaN(NaN));          // true
console.log(Number.isNaN("string"));     // false (unlike global isNaN())

// For finite numbers
console.log(Number.isFinite(42));        // true
console.log(Number.isFinite(Infinity));  // false

Type Coercion

JavaScript performs automatic type conversion when operations involve different types.

Implicit Coercion

console.log("5" + 3);                    // "53" (number coerced to string)
console.log("5" - 3);                    // 2 (string coerced to number)
console.log("5" * "3");                  // 15 (strings coerced to numbers)
console.log(true + 1);                   // 2 (true coerced to 1)
console.log(false + 1);                  // 1 (false coerced to 0)
console.log(5 + undefined);              // NaN (undefined coerced to NaN)

Explicit Coercion

// To String
console.log(String(42));                 // "42"
console.log(String(true));               // "true"
console.log(String(null));               // "null"
console.log(String(undefined));          // "undefined"
console.log((123.45).toString());        // "123.45"

// To Number
console.log(Number("42"));               // 42
console.log(Number("42px"));             // NaN
console.log(Number(true));               // 1
console.log(Number(false));              // 0
console.log(Number(null));               // 0
console.log(Number(undefined));          // NaN
console.log(parseInt("42px", 10));       // 42
console.log(parseFloat("3.14"));         // 3.14

// To Boolean
console.log(Boolean(0));                 // false
console.log(Boolean(""));                // false
console.log(Boolean("hello"));           // true
console.log(Boolean(42));                // true
console.log(!!42);                       // true (shorthand for Boolean())

Primitive vs. Reference Types

Value Comparison

Primitives are compared by value:

let a = 5;
let b = 5;
console.log(a === b);                    // true

Objects are compared by reference:

let obj1 = { value: 5 };
let obj2 = { value: 5 };
console.log(obj1 === obj2);              // false (different references)

let obj3 = obj1;
console.log(obj1 === obj3);              // true (same reference)

Mutability

Primitives are immutable:

let name = "Rahul";
name[0] = "K";                           // No effect
console.log(name);                       // "Rahul" (unchanged)

Objects are mutable:

let user = { name: "Rahul" };
user.name = "Karan";
console.log(user.name);                  // "Karan" (changed)

Interview Tips

  • Understand the difference between primitive and reference types
  • Be able to explain type coercion and its implications
  • Know how to properly check types in JavaScript
  • Understand that typeof null returns “object” (a historical bug)
  • Be familiar with ES6 data types like Symbol, Map, and Set
  • Understand how primitive values are immutable while objects are mutable
  • Be prepared to discuss the differences between == and === operators in relation to types

Test Your Knowledge

Take a quick quiz to test your understanding of this topic.

Test Your JavaScript Knowledge

Ready to put your skills to the test? Take our interactive JavaScript quiz and get instant feedback on your answers.