Question 101 - 110
#101. What's the value of output?
const one = false || {} || null;
const two = null || false || '';
const three = [] || 0 || true;
console.log(one, two, three);
javascript
- A:
false
null
[]
- B:
null
""
true
- C:
{}
""
[]
- D:
null
null
true
Answer
Answer: C
With the ||
operator, we can return the first truthy operand. If all values are falsy, the last operand gets returned.
(false || {} || null)
: the empty object {}
is a truthy value. This is the first (and only) truthy value, which gets returned. one
is equal to {}
.
(null || false || "")
: all operands are falsy values. This means that the last operand, ""
gets returned. two
is equal to ""
.
([] || 0 || "")
: the empty array[]
is a truthy value. This is the first truthy value, which gets returned. three
is equal to []
.
#102. What's the value of output?
const myPromise = () => Promise.resolve('I have resolved!');
function firstFunction() {
myPromise().then((res) => console.log(res));
console.log('second');
}
async function secondFunction() {
console.log(await myPromise());
console.log('second');
}
firstFunction();
secondFunction();
javascript
- A:
I have resolved!
,second
andI have resolved!
,second
- B:
second
,I have resolved!
andsecond
,I have resolved!
- C:
I have resolved!
,second
andsecond
,I have resolved!
- D:
second
,I have resolved!
andI have resolved!
,second
Answer
Answer: D
With a promise, we basically say I want to execute this function, but I'll put it aside for now while it's running since this might take a while. Only when a certain value is resolved (or rejected), and when the call stack is empty, I want to use this value.
We can get this value with both .then
and the await
keyword in an async
function. Although we can get a promise's value with both .then
and await
, they work a bit differently.
In the firstFunction
, we (sort of) put the myPromise function aside while it was running, but continued running the other code, which is console.log('second')
in this case. Then, the function resolved with the string I have resolved
, which then got logged after it saw that the callstack was empty.
With the await keyword in secondFunction
, we literally pause the execution of an async function until the value has been resolved before moving to the next line.
This means that it waited for the myPromise
to resolve with the value I have resolved
, and only once that happened, we moved to the next line: second
got logged.
#103. What's the value of output?
const set = new Set();
set.add(1);
set.add('Lydia');
set.add({ name: 'Lydia' });
for (let item of set) {
console.log(item + 2);
}
javascript
- A:
3
,NaN
,NaN
- B:
3
,7
,NaN
- C:
3
,Lydia2
,[object Object]2
- D:
"12"
,Lydia2
,[object Object]2
Answer
Answer: C
The +
operator is not only used for adding numerical values, but we can also use it to concatenate strings. Whenever the JavaScript engine sees that one or more values are not a number, it coerces the number into a string.
The first one is 1
, which is a numerical value. 1 + 2
returns the number 3.
However, the second one is a string "Lydia"
. "Lydia"
is a string and 2
is a number: 2
gets coerced into a string. "Lydia"
and "2"
get concatenated, which results in the string "Lydia2"
.
{ name: "Lydia" }
is an object. Neither a number nor an object is a string, so it stringifies both. Whenever we stringify a regular object, it becomes "[object Object]"
. "[object Object]"
concatenated with "2"
becomes "[object Object]2"
.
#104. What's its value?
Promise.resolve(5);
javascript
- A:
5
- B:
Promise {<pending>: 5}
- C:
Promise {<fulfilled>: 5}
- D:
Error
Answer
Answer: C
We can pass any type of value we want to Promise.resolve
, either a promise or a non-promise. The method itself returns a promise with the resolved value (<fulfilled>
). If you pass a regular function, it'll be a resolved promise with a regular value. If you pass a promise, it'll be a resolved promise with the resolved value of that passed promise.
In this case, we just passed the numerical value 5
. It returns a resolved promise with the value 5
.
#105. What's its value?
function compareMembers(person1, person2 = person) {
if (person1 !== person2) {
console.log('Not the same!');
} else {
console.log('They are the same!');
}
}
const person = { name: 'Lydia' };
compareMembers(person);
javascript
- A:
Not the same!
- B:
They are the same!
- C:
ReferenceError
- D:
SyntaxError
Answer
Answer: B
Objects are passed by reference. When we check objects for strict equality (===
), we're comparing their references.
We set the default value for person2
equal to the person
object, and passed the person
object as the value for person1
.
This means that both values have a reference to the same spot in memory, thus they are equal.
The code block in the else
statement gets run, and They are the same!
gets logged.
#106. What's its value?
const colorConfig = {
red: true,
blue: false,
green: true,
black: true,
yellow: false,
};
const colors = ['pink', 'red', 'blue'];
console.log(colorConfig.colors[1]);
javascript
- A:
true
- B:
false
- C:
undefined
- D:
TypeError
Answer
Answer: D
In JavaScript, we have two ways to access properties on an object: bracket notation, or dot notation. In this example, we use dot notation (colorConfig.colors
) instead of bracket notation (colorConfig["colors"]
).
With dot notation, JavaScript tries to find the property on the object with that exact name. In this example, JavaScript tries to find a property called colors
on the colorConfig
object. There is no property called colors
, so this returns undefined
. Then, we try to access the value of the first element by using [1]
. We cannot do this on a value that's undefined
, so it throws a TypeError
: Cannot read property '1' of undefined
.
JavaScript interprets (or unboxes) statements. When we use bracket notation, it sees the first opening bracket [
and keeps going until it finds the closing bracket ]
. Only then, it will evaluate the statement. If we would've used colorConfig[colors[1]]
, it would have returned the value of the red
property on the colorConfig
object.
#107. What's its value?
console.log('❤️' === '❤️');
javascript
- A:
true
- B:
false
Answer
Answer: A
Under the hood, emojis are unicodes. The unicodes for the heart emoji is "U+2764 U+FE0F"
. These are always the same for the same emojis, so we're comparing two equal strings to each other, which returns true.
#108. Which of these methods modifies the original array?
const emojis = ['✨', '🥑', '😍'];
emojis.map((x) => x + '✨');
emojis.filter((x) => x !== '🥑');
emojis.find((x) => x !== '🥑');
emojis.reduce((acc, cur) => acc + '✨');
emojis.slice(1, 2, '✨');
emojis.splice(1, 2, '✨');
javascript
- A:
All of them
- B:
map
reduce
slice
splice
- C:
map
slice
splice
- D:
splice
Answer
Answer: D
With splice
method, we modify the original array by deleting, replacing or adding elements. In this case, we removed 2 items from index 1 (we removed '🥑'
and '😍'
) and added the ✨ emoji instead.
map
, filter
and slice
return a new array, find
returns an element, and reduce
returns a reduced value.
#109. What's the output?
const food = ['🍕', '🍫', '🥑', '🍔'];
const info = { favoriteFood: food[0] };
info.favoriteFood = '🍝';
console.log(food);
javascript
- A:
['🍕', '🍫', '🥑', '🍔']
- B:
['🍝', '🍫', '🥑', '🍔']
- C:
['🍝', '🍕', '🍫', '🥑', '🍔']
- D:
ReferenceError
Answer
Answer: A
We set the value of the favoriteFood
property on the info
object equal to the string with the pizza emoji, '🍕'
. A string is a primitive data type. In JavaScript, primitive data types don't interact by reference.
In JavaScript, primitive data types (everything that's not an object) interact by value. In this case, we set the value of the favoriteFood
property on the info
object equal to the value of the first element in the food
array, the string with the pizza emoji in this case ('🍕'
). A string is a primitive data type, and interact by value (see my blogpost if you're interested in learning more)
Then, we change the value of the favoriteFood
property on the info
object. The food
array hasn't changed, since the value of favoriteFood
was merely a copy of the value of the first element in the array, and doesn't have a reference to the same spot in memory as the element on food[0]
. When we log food, it's still the original array, ['🍕', '🍫', '🥑', '🍔']
.
#110. What does this method do?
JSON.parse();
javascript
- A: Parses JSON to a JavaScript value
- B: Parses a JavaScript object to JSON
- C: Parses any JavaScript value to JSON
- D: Parses JSON to a JavaScript object only
Answer
Answer: A
With the JSON.parse()
method, we can parse JSON string to a JavaScript value.
// Stringifying a number into valid JSON, then parsing the JSON string to a JavaScript value:
const jsonNumber = JSON.stringify(4); // '4'
JSON.parse(jsonNumber); // 4
// Stringifying an array value into valid JSON, then parsing the JSON string to a JavaScript value:
const jsonArray = JSON.stringify([1, 2, 3]); // '[1, 2, 3]'
JSON.parse(jsonArray); // [1, 2, 3]
// Stringifying an object into valid JSON, then parsing the JSON string to a JavaScript value:
const jsonArray = JSON.stringify({ name: 'Lydia' }); // '{"name":"Lydia"}'
JSON.parse(jsonArray); // { name: 'Lydia' }
javascript