Question 1
const a = { name: "JS" };
const b = a;
b.name = "React";
console.log(a.name);
Both variables reference the same object.
Question 2
const obj = { count: 1 };
const copy = obj;
copy.count++;
console.log(obj.count);
The original object is modified because both variables point to the same reference.
Question 3
let a = { value: 10 };
let b = a;
b = { value: 20 };
console.log(a.value);
Reassigning b creates a new object and does not affect a.
Question 4
const a = { id: 1 };
const b = a;
console.log(a === b);
Both variables point to the exact same object reference.
Question 5
const a = { id: 1 };
const b = { id: 1 };
console.log(a === b);
Objects with identical values are still different references.
Question 6
const arr1 = [1, 2]; const arr2 = arr1; arr2.push(3); console.log(arr1);
Arrays are also reference types.
Question 7
const user = {
profile: {
age: 20
}
};
const copy = user;
copy.profile.age = 25;
console.log(user.profile.age);
The nested object is shared through the same reference.
Question 8
function update(user) {
user.name = "React";
}
const user = {
name: "JS"
};
update(user);
console.log(user.name);
Objects are passed by sharing the reference.
Question 9
const user = {
name: "JS"
};
const copy = {
...user
};
copy.name = "React";
console.log(user.name);
Spread creates a new top-level object.
Question 10
const obj = {
a: 1,
b: 2
};
const result = {
...obj,
b: 10
};
console.log(result.b);
Later properties overwrite earlier ones.
Question 11
const user = {
profile: {
age: 20
}
};
const copy = {
...user
};
copy.profile.age = 30;
console.log(user.profile.age);
Spread performs a shallow copy. Nested objects remain shared.
Question 12
const arr = [1, 2]; const copy = [...arr]; copy.push(3); console.log(arr.length);
Spread creates a new array.
Question 13
const result = [
...[1, 2],
...[3, 4]
];
console.log(result);
Spread merges arrays element by element.
Question 14
const user = {
name: "JS",
age: 20
};
const { name } = user;
console.log(name);
Destructuring extracts matching properties.
Question 15
const user = {
name: "JS"
};
const { name: username } = user;
console.log(username);
Destructuring allows property renaming.
Question 16
const user = {
name: "JS"
};
const { name, age = 18 } = user;
console.log(age);
Default values are used when the property does not exist.
Question 17
const user = {
name: "JS"
};
const { age } = user;
console.log(age);
Missing properties produce undefined.
Question 18
const user = {
profile: {
age: 25
}
};
const {
profile: { age }
} = user;
console.log(age);
Nested destructuring can extract deeply nested properties.
Question 19
const arr = [10, [20, 30]]; const [a, [b]] = arr; console.log(b);
Array destructuring supports nested patterns.
Question 20
const user = {
id: 1,
name: "JS",
age: 20
};
const { id, ...rest } = user;
console.log(rest);
The rest operator collects remaining properties.
Question 21
const arr = [10, 20, 30]; const [first, , third] = arr; console.log(third);
Commas can skip array elements during destructuring.
Question 22
function printUser({ name }) {
console.log(name);
}
printUser({
name: "React"
});
Destructuring can be used directly in function parameters.
Question 23
const user = {
id: 1,
name: "JS"
};
console.log(
Object.keys(user)
);
Object.keys() returns an array of property names.
Question 24
const user = {
id: 1,
name: "JS"
};
console.log(
Object.values(user)
);
Object.values() returns property values.
Question 25
const user = {
id: 1,
name: "JS"
};
console.log(
Object.entries(user).length
);
Object.entries() returns key-value pairs.
Question 26
const user = {
name: "JS"
};
console.log(
user.hasOwnProperty("name")
);
The property exists directly on the object.
Question 27
const user = {
name: "JS"
};
console.log(
"name" in user
);
The in operator checks property existence.
Question 28
const user = Object.freeze({
name: "JS"
});
user.name = "React";
console.log(user.name);
freeze() prevents property modification.
Question 29
const user = Object.seal({
name: "JS"
});
user.name = "React";
console.log(user.name);
seal() allows updating existing properties.
Question 30
const user = {
name: "JS",
age: 20
};
delete user.age;
console.log(user.age);
delete removes the property from the object.
Question 31
const user = {
name: "JS"
};
const copy = user;
copy.name = "React";
console.log(user.name);
Both variables reference the same object.
Question 32
const user = {
profile: {
age: 20
}
};
const copy = {
...user
};
copy.profile.age = 30;
console.log(user.profile.age);
Spread creates a shallow copy. Nested objects remain shared.
Question 33
const users = [
{ age: 20 }
];
const copy = [...users];
copy[0].age = 30;
console.log(users[0].age);
The array is copied, but the object inside is still shared.
Question 34
const target = {
a: 1
};
const source = {
b: 2
};
const result =
Object.assign(target, source);
console.log(result);
Object.assign() copies properties into the target object.
Question 35
const a = {
id: 1
};
const b = {
id: 1
};
console.log(a === b);
Different objects always have different references.
Question 36
const a = [1, 2]; const b = [1, 2]; console.log(a === b);
Arrays are reference types.
Question 37
const a = {};
const b = a;
console.log(a === b);
Both variables point to the same object.
Question 38
const key = "name";
const user = {
[key]: "JS"
};
console.log(user.name);
Computed property names evaluate the expression inside [].
Question 39
const field = "age";
const user = {};
user[field] = 25;
console.log(user.age);
Bracket notation supports dynamic property names.
Question 40
const user = {
profile: {
age: 20
}
};
console.log(
user?.profile?.age
);
Optional chaining safely accesses nested properties.
Question 41
const user = null;
console.log(
user?.profile?.age
);
Optional chaining stops evaluation when null or undefined is encountered.
Question 42
const user = {
age: null
};
console.log(
user.age ?? 18
);
Nullish coalescing uses the right value for null or undefined.
Question 43
const user = {
age: 0
};
console.log(
user.age ?? 18
);
0 is not null or undefined, so it is preserved.
Question 44
const user = {
id: 1,
name: "JS"
};
const {
id,
...rest
} = user;
console.log(rest.name);
The rest object contains all remaining properties.
Question 45
const original = {
user: {
age: 20
}
};
const copy = {
...original
};
copy.user = {
age: 30
};
console.log(
original.user.age
);
Reassigning the nested property creates a new object and breaks the shared reference.