Question 1
const user = {
name: "JS"
};
console.log(
user?.name
);
Optional chaining safely accesses existing properties.
Question 2
const user = {
profile: {
city: "Delhi"
}
};
console.log(
user?.profile?.city
);
Nested optional chaining works safely.
Question 3
const user = {};
console.log(
user?.name
);
Missing properties return undefined.
Question 4
const user = null; console.log( user?.name );
Optional chaining prevents runtime errors on null.
Question 5
const users = [
{ name: "A" }
];
console.log(
users?.[0]?.name
);
Optional chaining also works with arrays.
Question 6
const value = null; console.log( value ?? "Default" );
Nullish coalescing uses the fallback for null.
Question 7
const value = undefined; console.log( value ?? "Default" );
Undefined triggers the fallback value.
Question 8
const value = ""; console.log( value ?? "Default" );
?? only checks for null or undefined.
Question 9
const value = 0; console.log( value ?? 100 );
0 is a valid value for ??.
Question 10
const value = false; console.log( value ?? true );
false is not nullish.
Question 11
let value = ""; value ||= "JS"; console.log(value);
||= assigns when the left side is falsy.
Question 12
let value = "React"; value &&= "JS"; console.log(value);
&&= assigns when the left side is truthy.
Question 13
let value = null; value ??= "JavaScript"; console.log(value);
??= assigns only for null or undefined.
Question 14
const key = "name";
const user = {
[key]: "JS"
};
console.log(
user.name
);
Computed property names use variable values as keys.
Question 15
const user = {
name: "JS",
age: 25
};
console.log(
Object.entries(user).length
);
Object.entries returns key-value pairs.
Question 16
const map =
new Map();
map.set(
"name",
"JS"
);
console.log(
map.get("name")
);
get() returns the value associated with the key.
Question 17
const map =
new Map();
map.set(
"a",
10
);
console.log(
map.has("a")
);
has() checks whether a key exists.
Question 18
const map =
new Map();
map.set(
"x",
1
);
map.delete("x");
console.log(
map.has("x")
);
delete() removes the key-value pair.
Question 19
const map =
new Map();
map.set("a",1);
map.set("b",2);
console.log(
map.size
);
size returns the number of entries.
Question 20
const map =
new Map();
map.set(
"a",
10
);
map.set(
"a",
20
);
console.log(
map.get("a")
);
Duplicate keys overwrite previous values.
Question 21
const set = new Set(); set.add(1); set.add(2); console.log( set.size );
Set stores unique values.
Question 22
const set = new Set([ 1,1,2,2 ]); console.log( set.size );
Duplicate values are removed automatically.
Question 23
const set =
new Set([
"JS"
]);
console.log(
set.has("JS")
);
has() checks value existence.
Question 24
const set = new Set([ 1,2 ]); set.delete(1); console.log( set.has(1) );
delete removes the specified value.
Question 25
const set = new Set(); set.add(1); set.add(1); set.add(1); console.log( set.size );
Only unique values are stored.
Question 26
const wm =
new WeakMap();
const obj = {};
wm.set(
obj,
"JS"
);
console.log(
wm.get(obj)
);
WeakMap keys must be objects.
Question 27
const ws =
new WeakSet();
const obj = {};
ws.add(obj);
console.log(
ws.has(obj)
);
WeakSet stores object references only.
Question 28
const user = {
name: "JS",
age: 25
};
console.log(
Object.keys(user)
.length
);
Object.keys returns all property names.
Question 29
const user = {
name: "JS",
age: 25
};
console.log(
Object.values(user)
.length
);
Object.values returns all property values.
Question 30
const entries = [ ["name","JS"] ]; const user = Object.fromEntries( entries ); console.log( user.name );
Object.fromEntries converts entries into an object.
Question 31
const id = Symbol(); console.log( typeof id );
Symbol is a primitive data type.
Question 32
console.log(
Symbol("id") ===
Symbol("id")
);
Every Symbol is unique.
Question 33
const id =
Symbol();
const user = {
[id]: "JS"
};
console.log(
user[id]
);
Symbol properties must be accessed using the same Symbol reference.
Question 34
function* gen() {
yield 1;
}
const g = gen();
console.log(
g.next().value
);
yield pauses execution and returns a value.
Question 35
function* gen() {
yield "JS";
}
const g = gen();
console.log(
g.next().done
);
The generator has not completed after the first yield.
Question 36
function* gen() {
yield 1;
yield 2;
}
const g = gen();
g.next();
console.log(
g.next().value
);
The second next() resumes execution from the previous yield.
Question 37
function* gen() {
yield 10;
yield 20;
}
const g = gen();
console.log(
g.next().value +
g.next().value
);
10 + 20 = 30.
Question 38
function* gen() {
return 100;
}
const g = gen();
console.log(
g.next().value
);
A returned value becomes the final generator value.
Question 39
const set =
new Set([1,2,3]);
let sum = 0;
for (const n of set) {
sum += n;
}
console.log(sum);
for...of iterates over Set values.
Question 40
const map =
new Map([
["a",1],
["b",2]
]);
let total = 0;
for (const [,v] of map) {
total += v;
}
console.log(total);
Map iteration returns [key,value] pairs.
Question 41
const arr =
Array.from("JS");
console.log(
arr.length
);
Array.from converts iterable values into arrays.
Question 42
console.log(
"JavaScript"
.includes("Script")
);
includes checks for substring existence.
Question 43
console.log( Number.isNaN(NaN) );
Number.isNaN accurately checks for NaN.
Question 44
console.log( Object.is( NaN, NaN ) );
Object.is treats NaN as equal to NaN.
Question 45
console.log( NaN === NaN ); console.log( Object.is( NaN, NaN ) );
NaN is never equal to itself using ===, but Object.is correctly identifies equality.