Day 2 of JavaScript Mastery Journey

Table of contents
- Welcome to Day 2 of my JavaScript Mastery Journey! ๐โจ
- JavaScript Journey: Day 1 Recap! โจ
- Understanding JavaScript: Deeper Dive! ๐ง ๐ก
- 1. Statically vs. Dynamically Typed Languages ๐ค๐
- 2. Expressions and Operations in JS ๐งฎโ
- 3. == vs === in JavaScript (Super Important Interview Question!) โ๏ธ๐ค
- 4. Type Coercion in JavaScript: The Magic Translator! โจ๐ฃ๏ธ
- 5. Arrays in JavaScript: Your Numbered Collection! ๐๐
- 6. Objects in JavaScript: Your Labeled Collection! ๐ฆ๐
- 7. Type Conversion (Type Coercion Revisited) in JavaScript ๐โจ
- Summary of Day 2 ๐

Welcome to Day 2 of my JavaScript Mastery Journey! ๐โจ
Author: Ravindranath Porandla โ๏ธ
JavaScript Journey: Day 1 Recap! โจ
The Story of JavaScript: ๐
Its creation in 1995 by Brendan Eich in just 10 days!
The evolution of its name (Mocha โ LiveScript โ JavaScript) and why it's NOT the same as Java.
Its core mission: to make static websites interactive.
What JavaScript Is & Its Role: ๐งฉ
Defined as a scripting language for behavior (complementing HTML for structure and CSS for style).
Its current status as the universal language of the web, used across frontend, backend, mobile apps, games, and AI.
JavaScript Versions โ ES5 vs ES6: ๐
Explanation of ECMAScript (ES).
Comparison of ES5 (2009) and ES6 (2015), highlighting ES6 as the "game-changer" with modern features like
let
/const
, arrow functions, and more.
Setting up and Running JavaScript: ๐ ๏ธ
Recommendation of VS Code.
How to embed JS (
<script>
tags, inline vs. external, placement best practices).The importance of JS Comments.
JavaScript with Node.js: โก๏ธ
Its history from 2009, enabling JS to run outside the browser.
Key concepts like non-blocking I/O and event-driven architecture (the "multi-tasking chef" analogy).
The role of npm (Node Package Manager).
DOM Manipulation with JavaScript: ๐งฑ
- Introduction to the Document Object Model (DOM) and how JS interacts with HTML elements.
Variables in JavaScript: ๐งฎ
- A comparison of
var
vs.let
andconst
(scope, re-declaration, re-assignment, hoisting), recommendinglet
/const
.
- A comparison of
JavaScript Data Types: ๐ฆ
- Categorization into Primitive Types (copied by value) and Reference Types (copied by reference), with examples.
Understanding JavaScript: Deeper Dive! ๐ง ๐ก
Welcome back, coding adventurers! ๐ Today, we're diving deeper into the amazing world of JavaScript. We'll explore how JS handles types, what "expressions" are, the super important ==
vs ===
debate, and then get hands-on with two of the most fundamental data structures: Arrays and Objects! Let's go! ๐
1. Statically vs. Dynamically Typed Languages ๐ค๐
Have you ever sorted your toys? ๐งธ Some toy boxes have fixed labels for what goes where (e.g., "Cars ONLY" ๐, "Dolls ONLY" ๐). If you try to put a doll in the car slot, it won't fit! This is like statically typed languages (like Java or C++): you tell the computer exactly what kind of information a variable will hold before the program even starts, and it sticks to that.
But imagine a magic toy box where you can put any toy anywhere, and you can even swap them around later! Today it holds cars, tomorrow it holds books! ๐ This is like dynamically typed languages (like JavaScript or Python). You don't have to define a variable's type upfront; the computer figures it out as the program runs.
Statically Typed Languages (e.g., Java, C++): ๐ท๏ธ๐
You define what kind of data a variable holds before the program runs (at "compile time").
int myNumber = 5;
โก๏ธmyNumber
must always be a whole number. Trying to put text in it later would cause an error!
Dynamically Typed Languages (e.g., JavaScript, Python): ๐งธ๐
The type of data a variable holds is figured out while the program is running (at "runtime").
You can change the type of data a variable holds anytime!
๐ Simple Example:
let myBox = 5; // Initially, myBox holds a Number ๐ข
console.log(myBox); // Output: 5
myBox = "hello"; // Now, myBox holds a String! ๐ฌ - This is perfectly valid in JavaScript!
console.log(myBox); // Output: hello
๐ก Tip: JavaScript's flexibility lets you change a variable's type anytime. This is powerful but can sometimes lead to unexpected "bugs" (little mistakes in your code) if you're not careful. To check what type a variable is holding at any moment, use typeof
(which we discussed in Day 1!). ๐ต๏ธโโ๏ธ
2. Expressions and Operations in JS ๐งฎโ
Think of writing a recipe! ๐งโ๐ณ
A Recipe (Your Whole Code) is made of many instructions.
An Expression is like a small instruction in your recipe that tells you how to make something specific to get an ingredient ready, and it always gives you a result! For example, "chop 3 carrots and 4 potatoes together" ๐ฅ๐ฅ. The result is "7 chopped veggies"! ๐ฅฆ
๐น Expression: Any valid piece of code that calculates and results in a value. It's like solving a mini-puzzle that gives you an answer.
3 + 4 // This is an expression. It calculates to 7. โ
"Hello" + " World" // This is an expression. It calculates to "Hello World". โ
true // This is also an expression (it's already a value). โ
๐น Literals: These are the most basic, fixed values you can have, like the raw ingredients in your recipe! They don't need any calculation.
10
(Number literal) ๐ข'hello'
(String literal) ๐ฌtrue
(Boolean literal) โ[]
(Array literal) ๐{}
(Object literal) ๐ฆ
๐น Operators: These are the special symbols that tell JavaScript to perform an action or a calculation between values. They are your cooking tools! ๐ช๐ฅ
Arithmetic:
+
(add),-
(subtract),*
(multiply),/
(divide),%
(remainder),**
(exponentiate, like2**3
is 2 to the power of 3 which is 8). โโโ๏ธโAssignment:
=
(assign value),+=
,-=
, etc. (shorthand for doing an operation and assigning, likex += 5
meansx = x + 5
). โก๏ธComparison:
==
(equal value),===
(equal value AND type),!=
(not equal value),!==
(not equal value AND type),>
(greater than),<
(less than),>=
(greater or equal),<=
(less or equal). These always result intrue
orfalse
. ๐๐Logical:
&&
(AND),||
(OR),!
(NOT). Used to combine or negate true/false conditions. ๐คUnary:
typeof
(what type is it?),delete
(remove something),!
(NOT),++
(increase by 1),--
(decrease by 1). Act on a single value. โ๏ธTernary:
condition ? val1 : val2
(a concise if-else statement: if condition is true, useval1
, otherwise useval2
). โBitwise:
&
,|
,^
,~
,<<
,>>
,>>>
. These are for very low-level operations on individual bits (like tiny on/off switches in the computer). You won't use these much in daily web development. ๐ก๐
๐ก Tip: Always use ===
(triple equals) and !==
(bang triple equals) when comparing values in JavaScript to avoid tricky situations! We'll see why next! ๐
3. ==
vs ===
in JavaScript (Super Important Interview Question!) โ๏ธ๐ค
Imagine you have two friends. How do you check if they are the "same"?
==
(Double Equals): "Are you like my friend?" ๐ฏโโ๏ธThis is a relaxed comparison. It checks if the value is the same, but it doesn't care about the type of thing you're comparing.
If the types are different (like a number and a string), JavaScript tries to be helpful and converts one of them to match the other before comparing. This is called Type Coercion (we'll explain this in detail soon!).
===
(Triple Equals): "Are you exactly my friend, same name, same age, same everything?" ๐ต๏ธโโ๏ธ- This is a strict comparison. It checks if both the value AND the type are the same. No helpful conversions allowed!
๐ Simple Example:
// Let's compare the number 5 with the string '5'
console.log(5 == '5'); // Output: true โ
(Because JS converts '5' to the number 5, then 5 == 5 is true)
console.log(5 === '5'); // Output: false โ (Because 5 is a number, and '5' is a string โ different types!)
console.log(10 == 10); // Output: true (Same value, same type)
console.log(10 === 10); // Output: true (Same value, same type)
๐ก Tip: Always prefer ===
for accuracy and predictability. It helps you avoid unexpected behaviors caused by JavaScript's automatic type conversions. Stick to strict equality! ๐ฏ
4. Type Coercion in JavaScript: The Magic Translator! โจ๐ฃ๏ธ
Type Coercion in JavaScript means the computer automatically converting one type of data (like a number) into another type (like a string) when it's trying to perform an operation. It's like JavaScript has a built-in magic translator! ๐ช
๐ Simple Definition: JavaScript "coerces" (forces) values to the correct type when types donโt match in an operation. It's trying to make sense of what you asked it to do!
๐ง Example 1: String + Number ๐โ5๏ธโฃโก๏ธ๐5๏ธโฃ
console.log("5" + 2); // What do you think this will be?
// Output: "52"
Here,
"5"
is astring
(text).2
is anumber
.When you use
+
with a string, JavaScript often assumes you want to join the two things together (like words). So, it converts2
into thestring
"2"
.Then it does "string concatenation" (joining text):
"5"
+"2"
becomes"52"
.
๐ง Example 2: String * Number ๐โ๏ธ5๏ธโฃโก๏ธ2๏ธโฃ5๏ธโฃ
console.log("5" * 2); // And this one?
// Output: 10
Again,
"5"
is astring
,2
is anumber
.But
*
(multiplication) is an arithmetic operation, not for joining text!So, JavaScript's magic translator tries to convert
"5"
into anumber
(which it can do, it becomes5
).Then it multiplies:
5
*2
becomes10
. Ta-da!
๐ Types of Coercion:
Implicit Coercion โ Done automatically by JavaScript without you asking. This is what we saw above!
"10" - 2 // โ 8 (JavaScript converts "10" to number 10, then subtracts) true + 1 // โ 2 (JavaScript converts `true` to number 1, then adds) false - 1 // โ -1 (JavaScript converts `false` to number 0, then subtracts) "5" * 2 // โ 10 (JavaScript converts "5" to number 5, then multiplies) "10" / 2 // โ 5 (JavaScript converts "10" to number 10, then divides)
Explicit Coercion โ Done manually by you, using special functions to tell JavaScript exactly what you want. You are in control! ๐โโ๏ธ
Number("123") // Converts string "123" to number 123 String(456) // Converts number 456 to string "456" Boolean(0) // Converts number 0 to boolean `false` parseInt("10.5")// Converts string "10.5" to integer (whole number) 10 parseFloat("10.5")// Converts string "10.5" to floating-point number 10.5 (123).toString()// Another way to convert a number to a string
โ Invalid Cases (When Coercion Can't Help): Sometimes, JavaScript's translator can't make sense of the conversion, and you'll get NaN
(Not a Number)! ๐ซ
Number("abc") // โ NaN (Can't convert "abc" into a number!)
parseInt("abc") // โ NaN
Boolean(undefined) // โ false (Undefined is considered "falsy")
๐ก Tip: Remember why ===
(strict equality) is so important? It helps you avoid unwanted implicit type coercion! ๐คฉ
console.log(0 == false); // Output: true (Because of coercion, JavaScript sees 0 as "falsy" like false)
console.log(0 === false); // Output: false (No coercion here! 0 is a number, false is a boolean โ different types!)
โ Summary of Type Coercion:
Type coercion = automatic type conversion by JavaScript. ๐
It can be helpful, but also lead to confusing "bugs" if you're not careful. ๐
Always use strict equality (
===
) to prevent unexpected coercion and keep your code predictable! ๐ก๏ธ
5. Arrays in JavaScript: Your Numbered Collection! ๐๐
Imagine you have a numbered shelf ๐ข or a train with many carriages ๐. Each spot on the shelf or each carriage can hold a different item, and they are always in a specific order. That's what an Array is in JavaScript!
An Array is a special type of object (we'll learn more about objects soon!) used to store an ordered list of things. These "things" (called elements) can be anything: numbers, words, other arrays, even functions! Super versatile! โจ
๐งฉ Array Creation: You can build your "numbered shelf" in a few ways:
let shelf1 = [1, 2, 3]; // The most common way, using square brackets [] - like putting items directly on the shelf.
let shelf2 = new Array(4, 5, 6); // Using the 'Array' constructor - like ordering a special custom shelf.
let emptyShelf = Array(3); // Creates an empty shelf with 3 numbered spots (initially empty).
let letters = Array.from("abc"); // Creates an array from something else, like a word!
// letters will be: ['a', 'b', 'c'] - each letter gets its own spot!
๐งฎ Accessing and Modifying Elements: To get something from your shelf, you use its number (called an index), starting from 0
(because computers love counting from zero!).
let myNumbers = [10, 20, 30]; // myNumbers[0] is 10, myNumbers[1] is 20, myNumbers[2] is 30
console.log(myNumbers[1]); // Output: 20 (This gets the item at spot #1, which is 20)
myNumbers[1] = 25; // We changed the item at spot #1 from 20 to 25!
console.log(myNumbers); // Output: [10, 25, 30]
๐ Useful Array Methods (Actions for your Shelf!): Arrays come with many built-in actions you can perform:
.push()
โ Add to the end of the shelf. โก๏ธโ.pop()
โ Remove the last item from the shelf. โฌ ๏ธโ.shift()
โ Remove the first item from the shelf. โฌ ๏ธโ (Everything else moves down!).unshift()
โ Add to the front of the shelf. โก๏ธโ (Everything else moves up!).slice(start, end)
โ Takes a copy of a part of your shelf without changing the original. โ๏ธ.splice(start, deleteCount, ...items)
โ This is the "powerful cut and paste" tool! It can add, remove, or replace items right in the middle of your shelf. ๐ฅ.length
โ Tells you how many items are on your shelf (the size of the array). ๐
๐ Example using methods:
let myShelf = [1, 2, 3];
console.log("Original:", myShelf); // Original: [1, 2, 3]
myShelf.push(4); // Add 4 to the end
console.log("After push(4):", myShelf); // After push(4): [1, 2, 3, 4]
myShelf.pop(); // Remove the last item (4)
console.log("After pop():", myShelf); // After pop(): [1, 2, 3]
let firstTwo = myShelf.slice(0, 2); // Take a copy from index 0 up to (but not including) 2
console.log("Slice(0, 2):", firstTwo); // Slice(0, 2): [1, 2] (myShelf is still [1, 2, 3])
myShelf.splice(1, 1); // Go to index 1, delete 1 item (which is the number 2)
console.log("After splice(1, 1):", myShelf); // After splice(1, 1): [1, 3]
console.log("Shelf length:", myShelf.length); // Output: Shelf length: 2
๐ก Tip: Use slice()
for making a non-destructive copy (your original array stays the same). Use splice()
when you want to modify the original array directly! โ ๏ธ
๐ง Key Features of Arrays:
Indexed: Elements are always accessed using zero-based numbers (indexes).
arr[0]
is the first item. ๐ขDynamic: Arrays can grow or shrink in size dynamically as you add or remove items. You don't need to specify their size beforehand. ๐โฌ๏ธโฌ๏ธ
Heterogeneous: You can mix different types of values (numbers, strings, booleans, objects) in the same array! ๐๐๐
Internally: Behind the scenes, an array is actually a special kind of object with numeric keys (the indexes) and a
length
property. ๐คซ
๐น Important: Donโt use delete
on array elements! Using delete arr[1]
will remove the value but create an "empty spot" (a hole) in your array, and it won't re-number the other items. This can cause problems. Always use splice()
instead for removing elements! ๐ซ๐๏ธ
๐งช Checking if a Variable is an Array: If you want to be sure something is an array, use this helpful method:
let myArray = [1, 2, 3];
console.log(Array.isArray(myArray)); // Output: true โ
let myText = "hello";
console.log(Array.isArray(myText)); // Output: false โ
๐ฏ When to Use Arrays: Arrays are perfect when:
The order of your items matters. โก๏ธ
You need to access items quickly using their number (index). ๐ข
You want to store lists, like a shopping list ๐, a queue of people ๐งโ๐คโ๐ง, or a stack of plates ๐ฝ๏ธ.
๐ง Interview Tip: Arrays are Reference Types! Remember from Day 1 that Arrays are reference types! This is a common interview trick! If you copy an array to another variable, you're actually copying the reference (the address), not a new copy of the array itself.
JavaScript
let listA = [1, 2, 3];
let listB = listA; // listB now points to the SAME array as listA! ๐ค
listB.push(4); // If we add 4 using listB...
console.log(listA); // Output: [1, 2, 3, 4] โ Oh no! listA also changed! ๐ฑ
// This happens because both listA and listB are like two labels pointing to the same numbered shelf!
๐ Summary Table for Arrays:
Feature | Description |
Type | Reference |
Ordered | Yes |
Indexing | Zero-based (starts from 0) |
Dynamic Size | Yes (can grow/shrink) |
Heterogeneous | Yes (can hold different data types) |
6. Objects in JavaScript: Your Labeled Collection! ๐ฆ๐
If Arrays are like numbered shelves, Objects are like labeled boxes ๐ฆ, or a person's ID card ๐. Instead of numbers, each item inside an object has a unique name (called a key or property name), and then it holds a value. The value can be anything โ numbers, words, other objects, or even functions!
๐งฉ Creating & Accessing Objects: You create objects using curly braces {}
. Each item is a key: value
pair.
let userProfile = {
name: "John Doe", // 'name' is the key, "John Doe" is the value (a string)
age: 30, // 'age' is the key, 30 is the value (a number)
isStudent: false // 'isStudent' is the key, false is the value (a boolean)
};
// Accessing values:
console.log(userProfile.name); // Output: "John Doe" (Using dot notation - common and easy!)
console.log(userProfile["age"]); // Output: 30 (Using bracket notation - useful if key has spaces or is a variable)
๐ Adding/Updating/Deleting Properties: You can easily change what's in your labeled box:
let myBook = {
title: "The JavaScript Adventure",
author: "Ravi",
pages: 150
};
console.log("Original Book:", myBook);
// Adding a new property:
myBook.publisher = "CodePress";
console.log("After adding publisher:", myBook); // myBook now has a 'publisher' key!
// Updating an existing property:
myBook.pages = 160;
console.log("After updating pages:", myBook); // 'pages' changed to 160
// Deleting a property:
delete myBook.pages;
console.log("After deleting pages:", myBook); // 'pages' key is gone!
๐ Checking for a Property: Want to know if a label exists in your box?
console.log("author" in myBook); // Output: true (Does 'author' exist in myBook?)
console.log(myBook.hasOwnProperty("title")); // Output: true (Does 'title' exist directly on myBook?)
console.log(myBook.hasOwnProperty("pages")); // Output: false (It was deleted!)
๐งฌ Nested Objects: Boxes within Boxes! ๐ฆ๐ฆ Objects can hold other objects as values. This is great for organizing complex information, like folders within folders!
let myHouse = {
address: "123 Dev Street",
rooms: { // 'rooms' is an object inside 'myHouse'
bedroom: { // 'bedroom' is an object inside 'rooms'
size: "large",
windows: 2
},
kitchen: {
type: "modern"
}
},
hasGarden: true
};
console.log(myHouse.rooms.bedroom.size); // Output: "large" (Digging deep into the nested boxes!)
๐ Object Destructuring: Quickly Unpacking the Box! ๐จ This is a super cool way to pull out specific named items from your object and put them directly into variables. It makes your code cleaner! โจ
let car = {
make: "Honda",
model: "Civic",
year: 2020
};
// Instead of:
// let carMake = car.make;
// let carModel = car.model;
// Use destructuring to get 'make' and 'model' directly:
let { make, model } = car; // Now 'make' variable is "Honda", 'model' variable is "Civic"
console.log(make); // Output: Honda
console.log(model); // Output: Civic
๐ก Tip: Destructuring for objects is order-insensitive (you can list the names in any order) but key-sensitive (the names you list must match the object's property names exactly!). ๐ฏ
๐ Looping Over Object Properties: To look at all the labels and their values in your object one by one, you can use a for...in
loop:
let device = {
type: "laptop",
brand: "Apple",
price: 1500
};
for (let key in device) { // For each 'key' (label) in the 'device' object
console.log(key + ": " + device[key]); // Print the key and its value
}
// Output:
// type: laptop
// brand: Apple
// price: 1500
๐ฆ Built-in Object Utility Methods (Special Tools for your Labeled Boxes!): JavaScript gives you some powerful tools to work with objects:
Method | Purpose |
Object.keys(obj) | Returns an array of all the keys (labels) in the object. ๐๐ |
Object.values(obj) | Returns an array of all the values in the object. ๐ผ๏ธ๐ |
Object.entries(obj) | Returns an array of [key, value] pairs for each item. ๐๐ผ๏ธ๐ |
Object.assign(target, src) | Copies properties from one or more source objects (src ) to a target object (target ). Useful for merging! ๐ค |
Object.freeze(obj) | Makes an object completely immutable (unchangeable). You can't add, remove, or change any properties. ๐ง๐ |
Object.seal(obj) | Prevents adding or removing properties, but you can still change existing ones. ๐ก๏ธ |
hasOwnProperty("key") | Checks if a property exists directly on the object (not inherited). โ |
7. Type Conversion (Type Coercion Revisited) in JavaScript ๐โจ
We briefly touched on Type Coercion earlier, but let's look at it specifically as Type Conversion. It's all about changing one data type into another.
๐น Implicit Conversion (Auto by JS): This is when JavaScript's "magic translator" automatically changes types for you during operations. It's usually when an operator needs specific types to work.
console.log("5" + 1); // โ "51" (Number 1 becomes string "1", then concatenated)
console.log("5" - 1); // โ 4 (String "5" becomes number 5, then subtracted)
console.log(true + 1); // โ 2 (Boolean `true` becomes number 1, then added)
console.log(false - 1); // โ -1 (Boolean `false` becomes number 0, then subtracted)
console.log("5" * 2); // โ 10 (String "5" becomes number 5, then multiplied)
console.log("10" / 2); // โ 5 (String "10" becomes number 10, then divided)
๐ธ Explicit Conversion (Done Manually by You): This is when you tell JavaScript precisely to convert a value to a specific type using special functions. You are in control! ๐งโ๐ป
String(123) // Converts number 123 to string "123"
Number("456") // Converts string "456" to number 456
Boolean(0) // Converts number 0 to boolean `false` (0 is "falsy")
Boolean("hello") // Converts string "hello" to boolean `true` (non-empty strings are "truthy")
parseInt("10.5") // Converts string "10.5" to integer (whole number) 10
parseFloat("10.5")// Converts string "10.5" to floating-point number 10.5
(123).toString() // Another way to convert a number to its string representation
โ Invalid Cases: Sometimes a conversion just isn't possible, resulting in NaN
(Not a Number) or specific boolean values:
Number("abc") // โ NaN (Can't make a number from "abc"!)
parseInt("abc") // โ NaN
Boolean(undefined) // โ false (undefined is "falsy")
Boolean(null) // โ false (null is "falsy")
Boolean("") // โ false (empty string is "falsy")
๐ก Tip: When you get input from users (like from a text box on a website), it often comes as a string
! Always use Number()
or parseInt()
or parseFloat()
if you're expecting numerical input, so you can do math correctly. Don't rely on implicit coercion for user input! ๐ขโก๏ธ๐ฌ
Summary of Day 2 ๐
Day 2: What We Learned Today! ๐
Today, we took a deeper dive into JavaScript, covering some really important concepts that make your code more powerful and flexible. Hereโs a quick recap of what we explored:
Statically vs. Dynamically Typed Languages: We learned the difference between languages where you declare a variable's type upfront (static, like Java) and those where the type is determined as the code runs (dynamic, like JavaScript). We saw how JavaScript's flexibility lets you change a variable's type on the fly! ๐ค๐
Expressions and Operations: We explored what an expression is (any code that produces a value) and reviewed different types of operators (arithmetic, assignment, comparison, logical, and more). We also touched on literals as fixed values in code. โโ
==
vs===
(Equality Comparison): This was a big one! We understood the crucial difference between the "loose" equality (==
), which performs type coercion, and the "strict" equality (===
), which checks both value and type without conversion. The key takeaway: always prefer===
for predictability! โ๏ธ๐คType Coercion: We uncovered JavaScript's "magic translator" and how it automatically converts data types during operations (implicit coercion). We also saw how you can explicitly convert types yourself using functions like
Number()
,String()
, andparseInt()
. โจ๐ฃ๏ธArrays in JavaScript: We learned that arrays are like numbered collections of items. We covered how to create them, access/modify elements using indexes, and use powerful array methods like
push()
,pop()
,slice()
, andsplice()
. We also reinforced that arrays are reference types! ๐๐Objects in JavaScript: We discovered that objects are like labeled collections of key-value pairs. We explored creating objects, accessing properties using dot or bracket notation, adding/updating/deleting properties, and working with nested objects. We also touched on object destructuring for cleaner code and useful utility methods like
Object.keys()
andObject.values()
. ๐ฆ๐
Phew! That's a lot of awesome knowledge for Day 2! You're building a strong foundation in JavaScript! ๐ช
Follow more at: Ravindranath Porandla Blog ๐ง ๐
โ Ravindranath Porandla ๐งโ๐ป
Subscribe to my newsletter
Read articles from Ravindranath Porandla directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
